반응형
스프링 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 : 아주 심각한 에러가 발생한 상태
반응형