Log back
가장 많이 사용되는 log 툴인 log4j를 기반으로 산업적인 로깅 시스템을 개발하였는데, 그 결과물이 log back.
- log back의 성능이 log4j보다 빠르고 더 가벼움
- log4j와 slf4j의 형태 모두 지원함
구조
log 출력 구분

위의 표처럼 로그 출력을 계층화 시킬 수 있습니다.
log 출력 XML pattern
%-4relative [%thread] %-5level %logger{32} - %msg%n 형식으로 XML을 setting하면
176 [main] DEBUG manual.architecture.HelloWorld2 - Hello world.
이 처럼 출력 됩니다.
Configuration
LOG back을 사용하다 보면 파일로 출력하고 싶은 때도 있습니다. 또한 적절한 로그 수준에 맞게 출력하고 싶은 필요성을 느낍니다. 이럴 때에 설정값을 변경하면 보다 쉽게 하고 싶은 일들을 할 수 있습니다.
설정 파일들
설정파일을 확인하는 순서 (상위의 순서에 설정이 존재하면 아래 내용은 찾지 않습니다.)
- classpath에 있는 logback.groovy 파일
- classpath에 있는 logback-test.xml 파일
- classpath에 있는 logback.xml 파일
- JVM이 ServiceLoader를 가지면 이것을 com.qos.logback.classic.spi.Configurator로 사용합니다.
- 이것도 없다면 log back이 console에 바로 출력하는 BasicConfigurator를 사용합니다.
기본 설정파일
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
위의 설정 파일은 콘솔로 출력하고 debug 레벨까지 출력하며
17:44:58,578 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml]
위의 내용처럼 출력됩니다.
설정파일 재참조
<configuration scan="true" scanPeriod="30 seconds" >
...
</configuration>
프로그램이 실행하는 중에 위처럼 하면 설정파일의 수정을 확인할 수 있습니다. 위의 내용은 설정파일 수정을 30초마다 추적하겠다는 의미입니다. scanPeriod 속성을 적지 않으면 1분마다 추적합니다.(default값)
root와 logger
root와 logger를 이용해서 로그를 출력할 위치와 정도를 나타낼 수 있습니다.
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="chapters.configuration" level="INFO" />
<logger name="chapters.configuration.Foo" level="DEBUG" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
위처럼 나타낼 수 있으며 위처럼 설정하면

위의 표처럼 assign됩니다.
Appender
Appender를 이용하면 출력할 위치와 출력 패턴을 설정할 수 있습니다.
기본 구조 - 콘솔에찍는 appender - 속성 - name: Appender의 이름 - class: 사용할 Appender - 내부 entity - encoder: 출력 형식을 지정함 - pattern: 로그에 출력하고 싶은 데이터 형식을 출력함
콘솔 appender
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
File appender
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
- 파일이 있지 않으면 생성해 줍니다.
- 하나의 파일에 로그를 모두 넣습니다.
RollingFileAppender
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVM writing to the same log file -->
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
- 파일을 형식과 규칙에 맞게 생성해줍니다.
- 작성 일자 기준 혹은 최대 길이 기준으로 구분할 수 있습니다.