[Spring] 스프링 Logback 설정 및 사용법
Logback
Logback은 SLF4J의 API를 사용하며, log4j의 아키텍쳐 기반으로 재작성 되었으고, 성능은 10배 정도 좋다고 합니다.
설명은 아랫분이 엄청 잘해주셔서 링크 남깁니다.
pom.xml
Logback을 사용하기 위하여 pom.xml에 slf4j와 logback을 추가해 주면 됩니다.
<!-- Logback -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcloverslf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
*logj4 관련 dependency는 모두 지워줘야 합니다. 로컬에서 테스트 할 때는 에러도 없었고, 로그도 잘 남았지만, 리눅스 서버에서 테스트 했을 때, 로그가 남지 않았었습니다.
logback.xml
src/main/resource에 logback.xml 파일을 만들어 주면 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- 30초마다 설정 파일의 변경을 확인하고, 파일이 변경되면 다시 로딩 -->
<configuration scan="true" scanPeriod="30 seconds">
<!-- logback이 정상 종료되도록 -->
<shutdownHook />
<!-- console에 로그 -->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %40logger{0} - %C - %replace(%msg){'[\r\n]+',
''} %n</Pattern> -->
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%logger] - %replace(%msg){'[\r\n]+', ''} %n</Pattern>
</layout>
</appender>
<!-- 로그 File에 저장 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <file>D:\\logs\\catalina.log</file> -->
<file>./logs/catalina.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 일별로 로그파일이 생성된다. -->
<!-- LOCAL -->
<!-- <fileNamePattern>D:\\logs\\ming-%d{yyyy-MM-dd}.%i.log</fileNamePattern> -->
<fileNamePattern>./logs/ming-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 5MB가 넘으면 새로운 로그파일이 생성된다. -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 10건의 파일만 남기고 지난 로그파일은 삭제 된다. -->
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} %level [%logger] - %msg%n
</Pattern>
</encoder>
</appender>
<logger name="com.ming9.myPage" additivity="false">
<level value="DEBUG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<logger name="org.springframework">
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<root level=INFO>
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
configuration의 scan을 true로 설정하고 scanperiod를 입력해 주면 서버를 재시작 하지 않아도 파일을 다시 읽어와 서버를 재시작 하지 않아도 되는 장점이 있습니다.
appender Class
ch.qos.logback.core.ConsoleAppender : console에 로그를 찍기 위하여 사용
ch.qos.logback.core.FileAppender : 파일에 로그를 찍기 위하여 시용
ch.qos.logback.core.rolling.RollingFileAppender : 여러개의 파일을 순회하면서 로그를 찍기 위하여 사용
ch.qos.logback.classic.net.SMTPAppender : 로그를 메일에 보내기 위하여 사용
ch.qos.logback.classic.db.DBAppender : 데이터베이스에 로그를 찍기 위하여 사용
Pattern
%d : 로그 기록 시간
%-5level : %level만 사용해도 되며, -5는 5글자 고정으로 출력하기 위함
%logger : logger 이름. %logger{20} 과 같이 사용할 수도 있으며, {20}을 붙이게 되면 최대 20자리로 출력
%replace : replace으로 내용을 변경 할 수 있음
%msg : 메세지 출력 ex) log.info("test") 를 하게 되면 test가 출력됨.
%n : 줄바꿈
<logger>
logger는 name에 대상의 이름을 설정하고, level을 지정해 줍니다.
level은 TRACE > DEBUG > INFO > WARN > ERROR > OFF 가 있으며,
해당 레벨 이하는 출력하지 않습니다.
예를 들어 level을 INFO 로 설정해주게 되면 INFO, WARN, ERROR 관련 로그만 나오게 되며, TRACE, DEBUG의 로그는 나오지 않습니다.
additivity : additivity는 Default로 true이며, false로 설정할 경우 logger에서 설정한 name의 하위 로그는 찍지 나오지 않습니다.
<root>
logger의 에서 설정한 내용에서 한번 더 걸러낸다고 생각하시면 됩니다. logger에서는 DEBUG까지 출력하도록 설정했지만,
root에서 INFO로 설정한다면 INFO 아래의 로그는 나오지 않습니다.