티스토리 뷰

728x90

-1. 이 포스트는 Logback 설정방법에 대해서 설명한다. 대부분의 내용은 log를 파일로 저장하는 방법에 대한 것이다.

  -1-1 로그를 standard output으로 보낸 것만 알고 싶으면 3번 항목의 STDOUT만 보면 된다.

 

0. 간단히 파일에 로그를 출력하는 방법이 있다.

  0-1 application.properites파일에 설정한다.

  0-2 logging.file 아래 name과 path 두 가지 속성이 있는데, 둘 중에 하나 만 써야 한다

    0-2-1 둘 다 쓰면 둘 다 싹 무시해서 로그파일이 생성되지 않는다.

    0-2-2 예전에는 logging.file이 하나의 property였는데 deprecated되었다.

  0-3 윈도우를 사용할 경우 \\ 대신에 /로 바꾸어 주어야 한다.

  0-4 10MB를 기준으로 로그 파일이 추가된다.

 

logging.level.root=INFO
logging.file.name=C:/Users/heops/Documents/logs/flightreservation.log
#logging.file.path=C:/Users/heops/Documents/logs

 

  0-5 이 방법을 사용하면 파일과 콘솔 둘 다 별도의 설정없이 출력된다.

 

1. 좀 더 세부적인 설정을 위해서 logback.xml을 생성할 수 있다.

  1-0. 순서를 설명하면

    1-0-1. logback.xml 파일을 생성한다.

    1-0-2. appender를 정의한다.

      1-0-2-1. 로거 파일이름을 지정한다.

      1-0-2-2. 출력방식을 지정한다.

      1-0-2-3. 로거 파일 저장 주기를 설정한다.

    1-0-3. root 로거에 사용할 appender를 지정한다.

 

  1-1. Logging에는 여러 요소가 있다.

    1-1-1. Logger는 로직상 출력되는 데이터를 가지고 오는 기능을 한다.

    1-1-2. Appender(Log Handler)는 Logger가지고 온 정보를 스트림으로 보내는 기능을 한다.

      1-1-2-1. Appender는 내부적으로 encoder를 사용하여 로그가 어떻게 출력될지를 설정한다. 

        1-1-2-1-1. Pattern은 encoder가 어떤 형식으로 출력할지를 상세하게 지정한다.

      1-1-2-2. Policy는 로그파일이 어떤 방식으로 관리 될지를 설정한다.

        1-1-2-2-0 rollingPolicy는 얼마 주기로 파일이 생성되는지, 파일생성주기를 정한다.

        1-1-2-2-1. fileNamePattern은 로그파일이 추가될 때 어떤 이름이 지정 될지를 지정한다.

        1-1-2-2-2. timeBasedFileNamingAndTriggeringPolicy는 24시간을 기준으로 기본 로그를 추가하는 정책설정

          1-1-2-2-2-1. 내부에서 파일 크기로 로그파일이 추가 될 수 있도록 설정가능하다.

  1-2. logback.xml은 src/main/resources에 생성한다. 즉 root classpath에 위치시킨다.

 

2. 아래는 간단한 예제이다.

  2-1. class의 절대경로를 얻는 방법은 ctrl+shift+t로 클래스를 검색하여 클래스를 오픈하고

  2-2. qualified name을 복사해서 붙이면 된다.

  2-3. property를 사용하면 ${}이용해서 반복을 피할 수 있다. 

  2-4. %로 시작하는 구문들은 logback의 참조기호인데, %-5level은 어떤 레벨의 로그인지를 기록한다.

  2-5. %d로 timestamp를 기록가능한데 방식이 자바나 sql의 date 포멧지정과 동일하다.

  2-6. rollingPolicy는 로그 파일이 archive되는 방식을 지정하는데 기본적으로 시간기준의 정책을 사용한다.

  2-7. 아래 파일에서는 10MB가 되었거나 24시간이 지났을 경우 archived폴더로 현재의 로그가 복사된다.

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<property name="LOG_DIR" value="C:/Users/heops/Documents/logs"></property>
	<property name="LOG_PREFIX" value="flightreservation"></property>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/${LOG_PREFIX}.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <Pattern>%d{yyyy-MM-dd HH:mm:ss}- %-5level - %msg%n</Pattern>
    </encoder>
    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_DIR}/archived/${LOG_PREFIX}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>10MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
  </appender>
  
  <root level="info">
    <appender-ref ref="FILE"></appender-ref>
  </root>
</configuration>

 

3. 위의 설정만 하면 스프링은 위의 설정만 적용하게 되어 console에는 전혀 출력하지 않는다.

  3-1. console에서도 로그를 보고 싶으면 추가 appender를 지정하면 된다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<property name="LOG_DIR" value="C:/Users/heops/Documents/logs"></property>
	<property name="LOG_PREFIX" value="flightreservation"></property>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/${LOG_PREFIX}.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <Pattern>%d{yyyy-MM-dd HH:mm:ss}- %-5level - %msg%n</Pattern>
    </encoder>
    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_DIR}/archived/${LOG_PREFIX}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>10MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
  </appender>
  
  <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="info">
    <appender-ref ref="FILE"></appender-ref>
    <appender-ref ref="STDOUT"></appender-ref>
  </root>
</configuration>

 

4. 자세한 설정은 아래 경로를 참고한다.

http://logback.qos.ch/manual/configuration.html

728x90
댓글