본문 바로가기

SPRING BOOT

mybatis sql관련 console 출력

스프링 부트의 기본 로그 툴은 Logback이다.

로그 툴을 사용하는 이유는 System.out.print() 를 사용하게 되면 IO리소스를 많이 잡아먹어 속도가 느리며

후에 로그를 파일로 남겨서 확인해야 하기 때문이다.

 

로그를 잘 남겨놔야지 개발 단계 혹은 운영 단계에서 문제가 발생시 쉽게 잡아 낼 수 있다.

( 특히 SQL 쿼리는 눈에 보여야지 디버깅하기 쉽다. ) 

 

1. pom.xml 에 추가

spring starter에 포함 안되어 있는 로깅시 쿼리를 풀로 보여줄 수 있게 해주는 라이브러리를 추가한다.

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

 

2. log4jdbc.log4j2.properties 생성

log4jdbc.log4j2.properties 파일을 classpath 에 생성 후 아래의 설정을 복붙 한다.

 

 

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

log4jdbc.dump.sql.maxlinelength=0

 

 

3. properties에 datasource를 다음과 같이 변경한다.

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/project?characterEncoding=UTF-8&passwordCharacterEncoding=utf8
spring.datasource.username=demo
spring.datasource.password=123456

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/project?characterEncoding=UTF-8&passwordCharacterEncoding=utf8

 

이 부분을 변경해야지 SQL 로그에 ? 가 파라미터로 변경되어 나온다.

 

4. application.properties 에 로깅 관련 설정을 해준다.

 

만약 JPA을 사용 중이라면 JPA에 log 옵션은 꺼야지 중복으로 안 나온다.

 

properties 설정 방법

logging.level.org.springframework.web=debug		
logging.level.sql=error
# hibernate에서 생성하는 SQL 로그 끄기
logging.level.org.hibernate.SQL=off

logging.level.jdbc=error
logging.level.jdbc.sqlonly=debug

#max-history 설정 안하면 디폴트가 30이라 30일 이후의 로그는 자동 삭제된다. 필수로 해야함.
logging.file.max-history=9999999
logging.file.max-size=100MB
logging.file.name=${user.home}/logs/product.log

#  로그 패턴 설정
logging.pattern.console=%-5level %d{yyyy-MM-dd HH:mm:ss}[%thread] [%F - %M] [%logger{0}:%line] - %msg%n
logging.pattern.file= %-5level %d{yyyy-MM-dd HH:mm:ss}[%thread] [%F - %M] [%logger{0}:%line] - %msg%n

 

yml 설정 방법

logging:
  level:
    org.springframework.web : debug
    sql: error
    jdbc: off
    jdbc.sqlonly: debug 
  file : ${user.home}/logs/product.log
  file.max-history: 9999999
  file.max-size : 100MB

 

주로 사용하는 옵션을 써둔 것이다.

 

${user.home} 은 계정의 홈 디렉토리이다. (정상 작동을 안 하면 지우자)

 

logging.file.max-history를 설정을 안하면 디폴트가 30일이라 30일이 넘은 로그는 삭제한다. ( 운영 중에 삭제되면 큰일이니 꼭 설정을 해야 한다. )

logging.file.max-size 는 로깅 파일이 설정한 용량이 넘어가면 압축해서 저장한다. 기본 값은 설정한_파일명.gz 으로 압축한다.

 

로그 패턴 설정은 보기 편하게 알아서 수정하면 된다. 파일에 남기는 로그와 콘솔에 남기는 로그가 각각 세팅이 된다.

 

[ 로깅 패턴 ]

 

%-5level : 로그 레벨, -5는 출력의 고정폭 값(5글자) (INFO, ERROR, DEBUG , 기타 등등이다.)

%d{날짜 형식 포맷} : 로그 기록시간 %d{yyyy-MM-dd HH:mm:ss} 을 사용하면 된다.

%thread : 현재 Thread 명 

%F : 로깅을 발생시킨 파일 명
%M : 로깅을 발생시킨 메소드 명

%logger{length} : Logger name을 축약할 수 있다. length는 최대 자릿수이다 (0 = 무제한)

%line : 로깅이 발생된 라인 넘버
%msg : - 로그 메시지

%n : 줄바꿈(new line) 

 

이 외에도 여러 가지가 있다. ( http://logback.qos.ch/manual/layouts.html )

 

 

위와 같은 설정 추가로  sql이 console 에 찍히는 걸 확인.!