마이바티스의 로그백을 통한 로그 설정

들어가며

  • 스프링 부트는 보통 SLF4j을 인터페이스로 하여, 기본 로그 라이브러이인 Logback을 사용한다.
  • 특별한 설정 없이 SLF4j 을 로거로 사용한다면 Logback 을 실제로 사용한다.
  • Mybatis의 쿼리를 로그백으로 로깅할 수 있지만 다소 복잡한 세팅을 필요로 한다.

설정해야 하는 파일

  • 보통은 logback-spring.xml 혹은 application.properties 에서 설정한다.
  • 마이바티스의 경우 log4jdbc.log4j2.properties 와 logback-spring.xml 둘 다 반드시 설정해야 한다! 중요!

  • log4jdbc.log4j2.properties
log4jdbc.drivers=com.mysql.cj.jdbc.Driver
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.auto.load.popular.drivers=false
log4jdbc.dump.sql.maxlinelength=0
  • logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProfile name="default">
        <property name="LOG_PATH" value="c:\\log\\default"/>
    </springProfile>
    <springProfile name="window">
        <property name="LOG_PATH" value="c:\\log"/>
    </springProfile>
    <springProfile name="linux">
        <property name="LOG_PATH" value="/home/ec2-user/app/step2/logs"/>
    </springProfile>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="com.example.dic.core.config.LogbackFilter"/>
        <file>${LOG_PATH}/logs.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/logs_%d{yyyyMMdd}_%i.log</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="com.example.dic.core.config.LogbackFilter"/>        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.example.dic" level="INFO" additivity="true"/>

    <logger name="jdbc.sqltiming" level="OFF" additivity="false"/>
    <logger name="jdbc.resultsettable" level="OFF" additivity="false"/>
    <logger name="jdbc.sqlonly" level="INFO" additivity="true"/>
    <logger name="jdbc.audit" level="OFF" additivity="false"/>
    <logger name="jdbc.resultset" level="OFF" additivity="false"/>
    <logger name="jdbc.connection" level="OFF" additivity="false"/>
    <logger name="log4jdbc.debug" level="OFF" additivity="false"/>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

</configuration>