LogBack1

Log back

가장 많이 사용되는 log 툴인 log4j를 기반으로 산업적인 로깅 시스템을 개발하였는데, 그 결과물이 log back.

  • log back의 성능이 log4j보다 빠르고 더 가벼움
  • log4j와 slf4j의 형태 모두 지원함

구조

log 출력 구분

log map 계층도

위의 표처럼 로그 출력을 계층화 시킬 수 있습니다.

log 출력 XML pattern

%-4relative [%thread] %-5level %logger{32} - %msg%n 형식으로 XML을 setting하면

176  [main] DEBUG manual.architecture.HelloWorld2 - Hello world.

이 처럼 출력 됩니다.

Configuration

LOG back을 사용하다 보면 파일로 출력하고 싶은 때도 있습니다. 또한 적절한 로그 수준에 맞게 출력하고 싶은 필요성을 느낍니다. 이럴 때에 설정값을 변경하면 보다 쉽게 하고 싶은 일들을 할 수 있습니다.

설정 파일들

설정파일을 확인하는 순서 (상위의 순서에 설정이 존재하면 아래 내용은 찾지 않습니다.)

  1. classpath에 있는 logback.groovy 파일
  2. classpath에 있는 logback-test.xml 파일
  3. classpath에 있는 logback.xml 파일
  4. JVM이 ServiceLoader를 가지면 이것을 com.qos.logback.classic.spi.Configurator로 사용합니다.
  5. 이것도 없다면 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>
  • 파일을 형식과 규칙에 맞게 생성해줍니다.
  • 작성 일자 기준 혹은 최대 길이 기준으로 구분할 수 있습니다.

참고자료

log back 공식 홈페이지


Comments