필자의 환경 구성 : SPRING Boot / Gradle
쿼리문장을 Console화면에서 출력하고자 할때!
방법은 2가지가 있습니다!
- 사용할 클래스에서 Log클래스를 생성하여 Log를 찍는 방법
- Log4JDBC를 사용하여 Log를 찍는 방법 (feat. 쿼리 정렬)
이번엔 두번째 방법에 대해 알아보도록 하겠습니다.
첫 번째 방법을 사용하여 쿼리를 출력했을 때 불편한점이 있을 것입니다.
- 파라매터가 ?로 출력된다.
- 쿼리가 한줄로 출력된다.
- 전체적인 쿼리 구조나 쿼리의 수행시간, 쿼리 결과 같은 부가적인 정보들을 알 수 없다.
그래서 이번엔 두번째 방법인 Log4JDBC를 이용하여 출력하려고 합니다.
1. 라이브러리 추가하기
- build.gradle 파일에 아래와 같이 라이브러리를 추가합니다!
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
2. Log4jdbc 추가하기
- resources 폴더 밑에 log4jdbc.log4j2.properties파일을 생성합니다. (오. 타. 주. 의)
- properties 파일은 New > File을 이용해서 확장자까지 새로 작성해 주셔야 합니다.
그리고 이 log4jdbc.log4j2.properties 안에는 아래와 같이 작성합니다!
log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength = 0
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
> 이슈 해결하기
감사합니다.
참고 서적
스프링 부트 시작하기이인우 |
'IT > Programming' 카테고리의 다른 글
[백준, Python] 2525번 오븐 시계 (0) | 2022.07.07 |
---|---|
[파이썬] 윈도우에서 Django 프레임워크로 웹페이지 구현하기 #1 (0) | 2022.07.07 |
SPRING BOOT LOGBACK 사용하기 ver.1 (0) | 2019.10.14 |
[XML] cvc-complex-type.4: Attribute 'version' must appear on element 'web-app'. (0) | 2019.09.26 |
[MYSQL연동] Caused by: java.sql.SQLException: The server time zone value (0) | 2019.09.26 |