본문 바로가기

Java/Spring

slf4j & logback 설정

maven

아래와 같습니다. 
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${org.springframework-version}</version>
    <exclusions>
        <!-- Exclude Commons Logging in favor of SLF4j -->
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
 
... 
 
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.7</version>
</dependency>
 
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>
cs

send log to console

콘솔에 로그를 찍기 위해 src/main/resources 폴더 아래 logback.xml 파일을 만들고 다음과 같이 작성합니다.

(패턴 참고)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- Console Log Setting -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <encoder>
                <pattern>[%d{yyyy/MM/dd HH:mm:ss}] %highlight(%-5level)| %cyan(%-25.25logger{0}) | %msg%n</pattern>
            </encoder>
        </layout>
    </appender>
 
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
 
</configuration>
cs


spring에서 프로젝트 생성하면 기본으로 생성되는 log4j.xml은 삭제해도 됩니다. 

설정이 잘 되었다면 아래와 같이 로그가 찍힙니다. 


send log to file

로그를 파일로 저장하기 위해서 appender를 추가해 줍니다. 

경로 / maxFileSize / maxHistory 등은 변경하시구요 

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>E:/logs/debug.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>[%-5level] %d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
    </encoder>
    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>E:/logs/old/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>
cs


root 에 appender 추가해주시면 됩니다. 

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="file" />
    </root>
cs


error 로그 분리

file로 빼는 appender를 하나 더 만드세요. (위의 것과 비슷한)
경로와 이름을 바꾸신 뒤 appender를 아래와 같이 등록해 줍니다. 
에러 level에 해당하는 로그만 분리되어 저장될 것입니다. 
    <!-- 콘솔 & 파일에 로그 전달-->
    <logger name="com.example" level="debug" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="file" />
    </logger>
 
    <root level="error">
        <appender-ref ref="file-error" />
    </root>
cs


sql logging

(전 단계의 logger에서 com.example과 같이 이미 포함시켰다면 이 단계는 스킵)

SQL 로그를 찍기 위해 logger를 하나 추가합니다. 
mybatis의 mapper가 들어있는 패키지를 name 안에 넣어 줍니다. 
<!-- 모든 mapper가 같은 패키지 안에 존재할 때 -->
<logger name="com.example.myweb.mapper" level="DEBUG"/>
<!-- mapper가 흩어져 있을 때 -->
<logger name="com.example.myweb.mapper.MyMapper" level="DEBUG"/>
cs


DEBUG 레벨로 설정시 아래와 같은 로그가 찍혔습니다.


TRACE 레벨로 설정하면 Columns와 Row 가 추가로 찍힙니다. 


logback.xml


연관글

log4jdbc 적용