한순간 한순간이 다 학습을 해야하는 순간이 되었다. 갑작스런 입춘 한파로 온 세상이 꽁꽁 얼어붙은 2월 5일.
오전내내 찾아 헤메이다 점심 먹기전 결정적으로(?) 해결을 한 mybatis 쿼리를 콘솔상에 찍는 설정. 별거 아닌데 모르면 참 헤메이는게 자바 스프링의 환경설정인 듯 하다.
우선 스프링부트2.x 프로젝트를 만들고 프로퍼티와 xml을 이용해서 프로젝트 환경 설정을 하고 mybatis를 통해 실행되는 쿼리를 눈으로 확인하기 위해서 몇가지 추가 설정을 하는 예이다.
먼저 의존성 추가. (pom.xml)
<!-- mariadb connector, client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>provided</scope>
</dependency>
<!-- log4jdbc 의존성 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
다음은 resources 디렉토리 하위에
log4jdbc.log4j2.properties
파일을 생성 하고 안에 내용은 다음과 같이 입력
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
다음은 application.properties 파일에 대한 설정이다.
logging.config=classpath:config/logback-spring-dev.xml
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
#spring.database.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mariadb://127.0.0.1:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=username
spring.datasource.password=userpassword
default 설정으로 #spring.database.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy 주석 처리된 문장이 있어 사용했더니 실행 도중 오류가 발생했다.
java.lang.RuntimeException: Driver org.mariadb.jdbc.Driver claims to not accept jdbcUrl, jdbc:log4jdbc:mariadb://
별내용은 아닌데 아마도 드라이버를 찾지 못했다는 오류 같다. 카멜 표현식으로 사용한 부분과 그렇지 않은 부분에 명시된 jdbcapi.DriverSpy에 대한 문제 때문에 한시간 정도 날려 먹은 것 같다.
마지막으로 logback-spring-dev.xml 에 대한 설정은 다음과 같이 한다.
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<logger name="jdbc" level="OFF"/>
<!-- SQL문만을 로그 -->
<logger name="jdbc.sqlonly" level="OFF"/>
<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보 -->
<logger name="jdbc.sqltiming" level="DEBUG"/>
<!-- ResultSet을 제외한 모든 JDBC 호출 정보 -->
<logger name="jdbc.audit" level="OFF"/>
<!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그 -->
<logger name="jdbc.resultset" level="OFF"/>
<!-- SQL 결과 조회된 데이터의 table을 로그로 -->
<logger name="jdbc.resultsettable" level="DEBUG"/>
<!-- <logger name="jdbc.connection" level="OFF"/>-->
<root level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
<!-- <appender-ref ref="ROLLING" />-->
</root>
</configuration>
이상태로 실행을 하니 쿼리와 resultSet까지 적당한 수준으로 로그가 남게 되어 개발할 때는 편하게 할 수 있을 것 같다.
또 하나의 푸닥거리 끝.
'프로그래밍 > Spring' 카테고리의 다른 글
ClassPathResource를 이용한 file 생성 (0) | 2020.02.26 |
---|---|
Failed to complete request: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method (0) | 2020.02.10 |
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) (0) | 2020.01.20 |
@Enumerated 에 대한 이야기 (0) | 2020.01.07 |
마이바티스의 동적 쿼리 (0) | 2019.12.19 |