Spring/프로젝트

태태개발일지 - 스프링 log4jdbc 설정

태태코 2024. 10. 31. 15:10
반응형

스프링 log4jdbc 설정

 

spring을 통해 로그를 조회하다보면 sql문에 매개변수들이 ?  ? 로 떠서 어떤 매개변수가 나갔는지 모르는 경우가 많았다 이를 해결하기 위해서 log4jdbc를 통해서 Log를 남겨보기로 했다.

 

 

1.  우선 Build.gradle 파일에 아래와 같은 Dependency를 추가해 주어야 한다.

implementation('org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16')

 

 

2. resources 하위에 라는 이름의 프로퍼티를 생성한다.

log4jdbc.log4j2.properties

 

log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator //쓴다는 선언
log4jdbc.dump.sql.maxlinelength = 0 // SQL 로그에서 출력될 한 줄의 최대 길이 
//0으로 설정하면 줄 길이에 제한 없이 전체 SQL을 출력해 준다. 즉, SQL이 길어도 잘리지 않고 전체가 출.
log4jdbc.auto.load.popular.drivers=false //자동으로 driver를 설정하지 않겠다.
log4jdbc.drivers=com.microsoft.sqlserver.jdbc.SQLServerDriver //수동으로 설정했을 때의 드라이버 명시

 

같이 구성해주면 된다.

 

 

3. Yaml 파일의 datasource부분을 변경해준다.

datasource:
  driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  jdbc-url: jdbc:log4jdbc:sqlserver:// DB 주소입력
  username: //DB userName 입력
  password:  //DB Password 입력

 

4. logback.xml 파일을 만들고 설정한다.

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%highlight([%-5level]) [%d{yy-MM-dd HH:mm:ss}] %cyan(%logger{36})\n - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="jdbc" level="OFF"/>
  <logger name="jdbc.connection" level="OFF"/>
  <logger name="jdbc.sqlonly" level="OFF"/>  <!-- 파라미터를 셋팅해서 출력-->
  <logger name="jdbc.sqltiming" level="DEBUG "/>  <!--쿼리 실행 속도 표시-->
  <logger name="jdbc.resultsettable" level="OFF"/>  <!-- 결과값을 보여줌-->
  <logger name="log4jdbc.debug" level="OFF"/>
  <logger name="jdbc.audit" level="OFF"/>
  <logger name="jdbc.resultset" level="OFF "/>

  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>

</configuration>

 

JDBC 

  • jdbc.sqlonly : SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL 표시.
  • jdbc.sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)와 쿼리를 포함한다.
  • jdbc.audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다.
    *많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다.*
  • jdbc.resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다.
  • jdbc.resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남긴다.
  • jdbc.connection : 열려있는 모든 번호와 연결 수립 및 해제 이벤트를 기록. 이는 연결 문제를 찾아내는데 매우 유용 (Connection Pool 설정)

Log level

ALL , TRACE , DEBUG , INFO , WARN , ERROR , FATAL , OFF <상세한 순서>

TRACE : 추적 레벨은 Debug보다 좀더 상세한 정보
DEBUG : 프로그램을 디버깅하기 위한 정보 
INFO : 상태변경과 같은 정보성 메시지
WARN : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지
ERROR : 에러시
FATAL : 아주 심각한 에러가 발생한 상태

 

반응형