본문 바로가기
스프링

Logback

by 공부 안하고 싶은 사람 2021. 5. 25.
반응형

Logback

위치

  • 기본
    • 스프링 : /resources/logback.mxl
    • 부트 : /resources/logback-spring.xml
  • .yml파일에서 설정가능 (profile에 따른 설정도 가능.)

 

레벨

TRACE < DEBUG < INFO < WARN < ERROR

설정 레벨 이상의 로그를 출력

(.yml파일에서 레벨 설정도 가능)

loggin.level.root: info # 전체
loggin.level.com.xxx.yyy.Class: debug # 패키지별

 

logback-spring.xml

 

<configuration>

부에 최대 1개의 <root>  0개 이상의 <appender><logger> 가진다.

설정 파일의 변경을 재시작하지 않고 주기적으로 읽어 올 수 있다.

<configuration scan="true" scanPeriod="60 seconds"> <!--minutes, hours-->

debug="true" -> 로그의 상태 메시지 출력

packagingData="true" -> 패키징 데이터를 검사하고 로깅 (성능 비용 있다)

 

 

<property>: 파일내에서 사용할 수 있는 변수 선언

선언한 변수는 ${}으로 사용

 

 

<root>, <logger> : 설정한 appender를 참조하여 package와 level설정

  • root : 전역 설정
    • name이 root인 logger
    • level : 로그레벨
  • logger : 지역(pachage) 설정
    • additivity : root 설정 상속 유무 설정.(default = true)
    • name : appender이름
    • level : 로그레벨

root와 logger는 <appender-ref ref="">를 통해 appender를 로거에 추가

 

 

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

<appender name="Address" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/xxx.log</file> <!--파일명, 경로-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>error</level> <!--해당 레벨의 로그만 별도의 필터 설정-->
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <fileNamePattern>logs/xxx_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>50MB</maxFileSize> <!--최대 파일크기 IO성능 영향-->
        <maxHistory>30</maxHistory> <!--최대 저장 파일 개수-->
        <maxIndex>5</maxIndex>
    </rollingPolicy>
   <encoder> <!--기본적인 패턴 예제, 추가적인것은 찾아보자-->
       <pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
       <charset>utf8</charset>
    </encoder>
</appender>

<!--지역-->
<logger name="com.humuson.tasbatch.batch.Address" level="INFO" additivity="false">
    <appender-ref ref="Address" />
</logger>

<logger name="org.hibernate" level="ERROR" />

<root level="INFO"> <!--전역-->
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="RollingFileAppender" />
</root>

 

<appender> : 형태를 설정, 출력될 대상 설정

  • ch.qos.logback.core.ConsoleAppender : 콘솔에 로그
    • <encoder>
    • <target> -> 보통 System.out 사용
  • ch.qos.logback.core.FileAppender : 파일에 로그
  • ch.qos.logback.core.rolling.RollingFileAppender : 여러개의 파일을 롤링
    • <file>
    • <append> : true(이어쓰기,default), false(덮어쓰기)
    • <encoder>
    • <rollingPolicy>
    • <triggeringPolicy> : rollover 활성 시점
    • <predent> : <file>이 없고 압축이 불가능한 경우, TimeBasedRollingPolicy에서 사용가능
  • ch.qos.logback.classic.net.SMTPAppender : 로그를 메일에 찍어 보낸다.
  • ch.qos.logback.classic.db.DBAppender : DB(데이터베이스)에 로그

 

<rollingPolicy>

  • ch.qos.logback.core.rolling.TimeBasedRollingPolicy => 일자별
    • <fileNamePattern>
    • <maxHistory> : 아카이브에 유지할 파일 개수 (1순위)
    • <totalSizeCap> : 아카이브에 유지할 파일의 총 크기 (2순위)
    • <cleanHistoryOnStart> : 시작시 로그파일 다 지우고 시작 (default 는 false)
  • ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP => 일자별 + 크기별 적용
  • ch.qos.logback.core.rolling.FixedWindowRollingPolicy -> fixed window 알고리즘 (파일크기별)
    • <fileNamePattern>
    • <minIndex>
    • <maxIndex>
    • <triggeringPolicy>와 함께 사용한다
  •  
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>logs/xxx_%i.log</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>10</maxIndex>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
          <maxFileSize>10MB</maxFileSize>
  </triggeringPolicy>

 

<fileNamePattern> 파일 쓰기가 종료된 log 파일명의 패턴을 지정한다.

.gz나 .zip으로 자동으로 압축할 수도 있다.

 

 

<layout>, <encoder>

최근에는 FileAppender가 encoder를 필요로 한다. (layout은 몰라도 된다.)

728x90
반응형

'스프링' 카테고리의 다른 글

스프링 핵심 원리 - (3)  (0) 2022.08.03
스프링 핵심 원리 - (2)  (0) 2021.09.10
스프링 핵심 원리 - (1)  (0) 2021.09.10
필터 / 인터셉터 / AOP  (0) 2021.06.28
Spring  (0) 2021.06.28

댓글