본문 바로가기

작업일지/신규업체 자동연동

#4 ) log4j 이용해서 로그에 쿼리 남기기

DB커넥션까지 완료했으니 내가 무슨 쿼리를 돌렸는지 쉽게 보기위해 

로그에 돌린 쿼리를 찍는 작업을 진행하기로 했다.

 

log4j를 이용해서 로그에 쿼리를 찍어보도록 하자!

 

먼저 pom.xml에 dependency를 추가한다

<dependency>
  <groupId>org.bgee.log4jdbc-log4j2</groupId>
  <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
  <version>1.16</version>
</dependency>

 

 

그리고 나서

resource폴더 안에 log4jdbc.log4j2.properties를 만들고 다음과 같이 작성한다.

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

 

그 후 커넥션 설정을 다음처럼 셋팅해주면 된다!

필자는 yml에 커넥션 설정값을 넣어놔서 yml을 수정했다.

config에서 커넥션 설정값을 넣어놨으면 그걸 수정하면 됨!

 

커넥션 url에 jdbc:log4jdbc:mysql:// << 이렇게 추가함

driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy

 

application.yml

 

하고 실행하면 로그에 쿼리가 남는걸 볼 수 있다.

그런데 보고싶은 정보는 쿼리와 결과값 정도인데 쓸데없는(?) 정보가 담긴 로그도 많이 찍히게 된다..

 

내가 보고싶은 정보만 보고싶다면 properties 혹은 yml에 다음과 같이 설정해주면 된다.

필자는 yml을 사용하므로 이렇게 적었다.

 

application.yml

logging:
  level:
    com:
      zaxxer:
        hikari: INFO
    javax:
      sql:
        DataSource: OFF
    jdbc:
      audit: OFF
      resultset: OFF
      resultsettable: INFO
      sqlonly: DEBUG
      sqltiming: OFF
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE

 

만약 properties를 사용한다면 다음과 같이 적으면 된다.

logging.level.jdbc.sqlonly=DEBUG
logging.level.jdbc.sqltiming=OFF
logging.level.jdbc.audit=OFF
logging.level.jdbc.resultset=OFF
logging.level.jdbc.resultsettable=INFO

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

logging.level.com.zaxxer.hikari=INFO
logging.level.javax.sql.DataSource=OFF

 

sqlonly : SQL문 만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다.

sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다.

audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다.

resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다.

resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남긴다.

 

이렇게 설정하면 내가 원하는 정보만 로그로 잘 남겨진다~

반응형