반응형
MySQL을 연동하여 개발하다 보면 위 화면처럼 쿼리 관련된 로그가 깔끔하게 출력되면 좋겠다는 생각을 하게 됩니다.
쿼리 관련된 깔끔한 로그를 출력하게 되면 가독성이 좋아지기 때문에 결과를 한눈에 볼 수 있어서 개발 환경이 더욱 좋아지게 됩니다.
이를 위해 log4jdbc를 사용하여 로그를 출력하는 방법에 대해 알아보도록 하겠습니다.
Spring Framework에 MySQL 연동하는 방법은 이전 글을 통해 확인하시기 바랍니다.
1. pom.xml 설정
pom.xml 파일에 dependency를 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.4</version>
<exclusions>
<exclusion>
<artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
|
cs |
2. driverClassName / url 설정
mysql 드라이버 클래스와 url을 변경해야 합니다.
2-1. driverClassName
net.sf.log4jdbc.sql.jdbcapi.DriverSpy
2-2. url
jdbc:log4jdbc:mysql://127.0.0.1:3306/dbName
** IP, 포트, 스키마명은 각자 상황에 맞게 작성합니다.
반응형
3. log4j2.xml 추가
log4j2.xml 파일을 생성하여 아래 내용을 작성합니다.
그리고 생성을 완료한 파일은 [resources] 폴더에 위치시킵니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="file" fileName="/filePath/logs.log" filePattern="/filePath/WAS.%i.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<DefaultRolloverStrategy max="10000" fileIndex="min" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="testProject.com" level="debug" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="file" />
</Logger>
<Logger name="testProject.framework" level="debug" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="file" />
</Logger>
<Logger name="org.mybatis" level="debug" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="file" />
</Logger>
<Logger name="testMapper" level="debug" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="file" />
</Logger>
<Logger name="org.springframework" level="warn" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</Logger>
<Logger name="org.apache" level="warn" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</Logger>
<!-- SQL 로그 출력 -->
<Logger name="jdbc.sqlonly" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</Logger>
<Logger name="jdbc.resultsettable" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</Logger>
</Loggers>
</Configuration>
|
cs |
filePath항목과
<Logger> 태그의 name 항목을 각자 상황에 맞게 수정하여 사용해야 합니다.
log4j2.xml 설정에 대한 자세한 내용은 추후 포스팅하도록 하겠습니다.
4. log4jdbc.log4j2.properties
log4jdbc.log4j2.properties 파일을 생성하여 아래 내용을 작성합니다.
이 파일 또한 [resources] 폴더에 위치시킵니다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
log4jdbc.drivers=com.mysql.cj.jdbc.Driver
log4jdbc.auto.load.popular.drivers=false
5. 테스트
Service 단에서 간단하게 테스트해보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import springTest.com.test.dao.CommonDAO;
@Service
public class TestService {
@Autowired private CommonDAO commonDAO;
public void dbtest()
{
Map<String, Object> map = new HashMap<String, Object>();
commonDAO.selectList("testMapper.selectTest", map);
}
}
|
cs |
결과
2022-08-02 15:35:43.127 [http-bio-8080-exec-24] DEBUG testMapper.selectTest - ==> Preparing: /* MySQL select TEST */ SELECT * FROM test_table
2022-08-02 15:35:43.167 [http-bio-8080-exec-24] DEBUG testMapper.selectTest - ==> Parameters:
2022-08-02 15:35:43.172 [http-bio-8080-exec-24] DEBUG jdbc.sqlonly - org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
9. /* MySQL select TEST */
SELECT
*
FROM test_table
2022-08-02 15:35:43.188 [http-bio-8080-exec-24] INFO jdbc.resultsettable -
|----|------|
|idx |value |
|----|------|
|1 |test1 |
|2 |test2 |
|3 |test3 |
|----|------|
2022-08-02 15:35:43.191 [http-bio-8080-exec-24] DEBUG testMapper.selectTest - <== Total: 3
Mapper에 작성했던 주석까지 표시가 되니 더욱 편리합니다.
각자 상황에 맞게 테스트해보시고 사용하시기 바랍니다.
728x90
반응형
'IT, 개발 > JAVA' 카테고리의 다른 글
JAVA - Json을 Map으로 / Map을 Json으로 형변환(Json to Map, Map to Json) (0) | 2022.08.19 |
---|---|
JAVA - while / do-while 사용법, 차이점 (0) | 2022.08.17 |
Spring / MySQL 연동 에러 (Could not get JDBC Connection) (1) | 2022.08.01 |
JAVA 시간 차이 계산하기 (Date getTime / SimpleDateFormat) (0) | 2022.07.19 |
Mac OS에서 이클립스 메소드 추적하기(함수 따라가기, 함수 호출되는 곳, 추적/역추적) (0) | 2022.07.18 |