IT/Programming / / 2019. 10. 14. 15:41

SPRING BOOT LOGBACK 사용하기 ver.2

반응형

필자의 환경 구성 : SPRING Boot / Gradle

 

쿼리문장을 Console화면에서 출력하고자 할때!

 

방법은 2가지가 있습니다!

  1. 사용할 클래스에서 Log클래스를 생성하여 Log를 찍는 방법
  2. Log4JDBC를 사용하여 Log를 찍는 방법 (feat. 쿼리 정렬)

이번엔 두번째 방법에 대해 알아보도록 하겠습니다.

 

첫 번째 방법을 사용하여 쿼리를 출력했을 때 불편한점이 있을 것입니다.

  1. 파라매터가 ?로 출력된다.
  2. 쿼리가 한줄로 출력된다.
  3. 전체적인 쿼리 구조나 쿼리의 수행시간, 쿼리 결과 같은 부가적인 정보들을 알 수 없다.

그래서 이번엔 두번째 방법인 Log4JDBC를 이용하여 출력하려고 합니다.

 

1. 라이브러리 추가하기

 - build.gradle 파일에 아래와 같이 라이브러리를 추가합니다!

 

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

 

build.gradle
추가된 라이브러리

2. Log4jdbc 추가하기

  - resources 폴더 밑에 log4jdbc.log4j2.properties파일을 생성합니다. (오. 타. 주. 의)

  - properties 파일은 New > File을 이용해서 확장자까지 새로 작성해 주셔야 합니다.

 

log4jdbc.log4j2.properties

그리고 이 log4jdbc.log4j2.properties 안에는 아래와 같이 작성합니다!

 

log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength = 0

 

log4jdbc.log4j2.properties

 

3. application.properties를 수정합니다.

  - 여기서 수정해야할 것은 딱. 2가지 입니다.

  - 수정할 것 : driver-class-name, jdbcurl

 

수정 전 내용

spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url: jdbc:mysql://localhost:3306/insight?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.hikari.username=
spring.datasource.hikari.password=
spring.datasource.hikari.connection-test-query=SELECT 1

mybatis.configuration.map-underscore-to-camel-case=true

 

수정 후 내용

spring.datasource.hikari.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.hikari.jdbc-url: jdbc:log4jdbc:mysql://localhost:3306/insight?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.hikari.username=
spring.datasource.hikari.password=
spring.datasource.hikari.connection-test-query=SELECT 1

mybatis.configuration.map-underscore-to-camel-case=true

 

수정 전 내용
수정 후 내용

4. logback-spring.xml를 수정합니다.

  - 추가한 것은 딱 2줄입니다.

  - 본 작업은 쿼리 및 실행 결과를 보여주는 로거를 추가하는 것입니다.

	<logger name="jdbc.sqlonly" level="INFO" appender-ref="console-infolog"/>
	<logger name="jdbc.resultsettable" level="INFO" appender-ref="console-infolog"/>

 

 * TIP : Log4JDBC는 다음과 같은 로거를 제공해주고 있습니다.

  • jdbc.sqlonly : SQL들을 보여주며 P-Statement 경우 관련된 파라매터는 자동으로 변경되어 출력됩니다.
  • jdbc.sqltiming : SQL문과 해당 SQL문의 실행 시간을 밀리초 단위로 보여줍니다.
  • jdbc.audit : ResultSets을 제외한 모든 JDBC 호출정보를 보여줍니다. (일반적으로 사용 안함)
  • jdbc.resultset : ResultSets을 포함한 모든 JDBC 호출정보를 보여줍니다. (일반적으로 더 사용 안함)
  • jdbc.resulttable : SQL의 조회 결과를 테이블로 보여줍니다.
  • jdbc.connection : Connection의 연결과 종료에 관련된 로그를 보여줍니다. 메모리 누수에 도움됨!

 

자 위와 같이 모두 따라하셨으면 로그 결과를 봐야겠죠?

 

쿼리 로그

나오긴 나왔는데 썩 이쁘진 않군요.

 

무튼 쿼리 로그를 찍는데 성공하였습니다!

 

그런데 HOXY, 아래와 같은 오류를 확인하셨다면 아래 글을 참고해주세요.

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'spring.datasource.hikari' to com.zaxxer.hikari.HikariConfig:

    Property: spring.datasource.hikari.driver-class-name
    Value: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    Origin: class path resource [application.properties]:1:44
    Reason: Failed to load driver class net.sf.log4jdbc.sql.jdbcapi.DriverSpy in either of HikariConfig class loader or Thread context classloader

Action:

Update your application's configuration

 > 이슈 해결하기

 

감사합니다.

 

 

참고 서적

스프링 부트 시작하기이인우
상세보기

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유