[Mybatis] Log4j 로그찍기
by 배부른코딩로그애플리케이션에서 로그는 중요하다! 이번엔 Mybatis SQL 로그를 찍는 법을 소화해보자.
로그는 항상 읽기 쉽고 명확하게 출력해야 모니터링 할 때 편한다
이번에는 Mybatis를 사용할 때 SQL query 로그를 깔끔하게 찍는 방법을 기록한다.
Log4Jdbc Remix를 사용하면 편하게 로그를 출력할 수 있다.
1. dependency
<!-- https://mvnrepository.com/artifact/org.lazyluke/log4jdbc-remix -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
2. root-context.xml or db-datasource.xml
<bean id="jndiSourceTrade" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/comp/env/jdbc/testdb" />
</bean>
<bean id="dataSource-trade" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="jndiSourceTrade" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="[SQL]: "/>
</bean>
</property>
</bean>
해당 코드에서 특이한 점은 JNDI를 사용했다는 점이다. JNDI를 사용하면 jndiObjectFactoryBean을 통해 빈 객체를 만들고, DataSource 빈 객체에 생성자로 참조해야 한다.
3. log4j.xml
<!-- Query Loggers -->
<logger name="jdbc.sqltiming" additivity="false">
<level value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_APPENDER"/>
</logger>
<logger name="jdbc.sqlonly" additivity="false">
<level value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_APPENDER"/>
</logger>
<logger name="jdbc.resultset" additivity="false">
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_APPENDER"/>
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_APPENDER"/>
</logger>
<logger name="jdbc.audit" additivity="false">
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_APPENDER"/>
</logger>
<logger name="jdbc.connection" additivity="false">
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_APPENDER"/>
</logger>
위와 같은 logger name 을 가진 속성들을 추가하면 된다.
각 logger name에 대한 기능은 다음과 같습니다. (개인적으로 위 LEVEL이 가장 깔끔!)
Name | Function |
jdbc.sqlonly | SQL 로그 기록. PreparedStatement일 경우, 실행된 SQL은 가독성을 위해 해당 위치에서 바인딩된 데이터로 대체된 바인딩 인수를 자동으로 표시. (보기 편함) |
jdbc.sqltiming | SQL 로그 기록. 그리고 해당 쿼리를 실행시키는데 실행 시간 정보(milliseconds) 포함. (SQL 분석시 유용) |
jdbc.audit | ResultSet을 제외한 모든 JDBC 호출 정보 기록. 많은 양의 로그가 생성되기 때문에 JDBC 문제를 추적하지 않는 한 일반적으로 사용 X |
jdbc.resultset | ResultSet을 포함한 모든 JDBC 호출 정보 기록. 따라서, 매우 방대한 양의 로그 기록. |
jdbc.resultsettable | jdbc 결과를 표로 기록, 조회된 데이터의 테이블 정보 출력. |
jdbc.connection | 열려있는 모든 번호와 연결 수립 및 해제 이벤트를 기록. 이는 연결 문제를 찾아내는데 매우 유용. (Connection Pool) |
[출처] http://log4jdbc.brunorozendo.com/
반응형
'Spring > Mybatis' 카테고리의 다른 글
[MyBatis] Could not resolve type alias '' (0) | 2023.04.06 |
---|---|
[Mybatis] LOB Type 데이터 처리하기 (0) | 2020.04.02 |
[Mybatis] Java Function 불러오기 (0) | 2020.03.27 |
[Mybatis] OGNL(Object Graph Navigation Language) Issue (0) | 2020.03.27 |
[Mybatis] 기본 및 유용한 문법 모음 (0) | 2020.03.27 |
블로그의 정보
배부른코딩로그
배부른코딩로그