본문 바로가기
SPRING/SPRING BOOT

LOGBACK

by 1TAL 2021. 2. 6.

■ LEVEL

TRACE  >  DEBUG  >  INFO  >  WARN  >  ERROR > FATAL

-. FATAL : 크리티컬한 오류 표시

-. ERROR : 요청을 처리하는 중 오류 표시.

-. WARN  : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지.

-. INFO  : 상태변경과 같은 정보성 로그 표시.
-. DEBUG : 프로그램을 디버깅하기 위한 정보 표시. 
-. TRACE : 추적 레벨은 Debug보다 상세한 정보 표시. (경로추적)

※ 상위 LEVEL의 경우 표기 안됨

    INFO 레벨로 지정하면 INFO, WARN, ERROR 로그가 찍히고, WARN 레벨로 지정하면 WARN, ERROR 로그가 찍힌다.

■ APPENDER

로그를 출력 할 위치, 출력 형식 등을 설정

1) ConsoleAppender ( ch.qos.logback.core.ConsoleAppender )
    – 로그를 OutputStream에 write 하여, 최종적으로 콘솔에 출력.
2) FileAppender ( ch.qos.logback.core.FileAppender )
    – 로그를 지정된 File에 기록.
3) RollingFileAppender ( ch.qos.logback.core.rolling.RollingFileAppender )
   – FileAppender로 부터 상속받은 Appender로 날짜, 최대 용량 등을 설정하여 지정한 파일명 패턴에 따라 로그가 다른 파일에 기록

4) SMTPAppender ( ch.qos.logback.classic.net.SMTPAppender )

   - 로그를 메일에 기록

5) DBAppender( ch.qos.logback.classic.db.DBAppender )

   - 데이터 베이스에 기록


Logback-Core의 기본 Appender 외에도 Logback-Classic 모듈의 다양한 Appender (SocketAppender, SSLSocketAppender 등)을 사용하여 로그를 원격위치에 기록.
Appender들의 하위 항목으로 출력 형식(Layout Pattern)을 지정하여 각 Appender마다 원하는 내용을 출력.
ex) %logger(Logger 이름), %thread(현재 스레드명), %level(로그 레벨), %msg(로그메시지), %n(new line) 등

 

■ pattern

[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n [2019-08-23 22:59:47:1306][main] INFO c.g.f.FirstProjectApplication - Started FirstProjectApplication in 1.193 seconds (JVM running for 1.665)

%d  => 로그 기록시간

%thread => 현재 Thread 이름

%-5level => 로그 레벨, -5는 출력의 고정폭 (5글자)

%logger{length} => 축약된 logger name, length는 최대 자릿수

%msg => 로그메시지 ( =%messsage )

%n => 줄바꿈

${PID:-} => 프로세스 아이디

 

기타

%p => 로깅 레벨

%F => 로깅이 발생한 프로그램 파일명

%M => 로깅일 발생한 메소드의 이름

%l => 로깅이 발생한 호출지의 정보

%L => 로깅이 발생한 호출지의 라인 수

%t => 쓰레드 명

%c => 로깅이 발생한 카테고리

%C => 로깅이 발생한 클래스 명

%m => 로그 메시지

%r => 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간

 

■ rollingPolicy class

ch.qos.logback.core.rolling.TimeBasedRollingPolicy => 일자별 적용

ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP => 일자별 + 크기별 적용

 

 

ex ) logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<
configuration scan="true" scanPeriod="30 seconds">         

  <!--로그 파일 저장 위치-->
  <property name="LOGS_PATH" value="./logs"/>

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

  <
appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <
filter class="ch.qos.logback.classic.filter.LevelFilter">
      <
level>error</level>
      <
onMatch>ACCEPT</onMatch>
      <
onMismatch>DENY</onMismatch>
    </
filter>
    <
file>${LOGS_PATH}/error.log</file>
    <
rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> 
       <
fileNamePattern>${LOGS_PATH}/error-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <
maxFileSize>100MB</maxFileSize>  <!-- 최대 파일 용량 (최대 10MB 내외 권장) -->
       <
maxHistory>60</maxHistory>   <!-- 최대 파일 생성 갯수-->
       <
totalSizeCap>10GB</totalSizeCap>
     </
rollingPolicy>

     <
encoder>
       <
pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</pattern>
     </
encoder>
  </
appender>

  <
appender name="LogstashAppender" class="net.logstash.logback.appender.LogstashTcpSocketAppender">   
    <
filter class="ch.qos.logback.classic.filter.LevelFilter">
      <
level>DEBUG</level>
      <
onMatch>ACCEPT</onMatch>
      <
onMismatch>DENY</onMismatch>
    </
filter>
    <
destination>192.168.10.73:5001</destination> <!-- encoder is required --> 
    <
encoder class="net.logstash.logback.encoder.LogstashEncoder" />
  </
appender>

  <
root level="debug">
    <
appender-ref ref="STDOUT"/>
    <
appender-ref ref="ERROR"/>
    <
appender-ref ref="LogstashAppender"/>
  </
root>
</
configuration>

 

 

참조 ) logback.qos.ch/manual/configuration.html

반응형

'SPRING > SPRING BOOT' 카테고리의 다른 글

SPRING BOOT 서비스  (0) 2025.04.04
[Spring Boot] Spring Boot  (0) 2017.09.11
Quartz + Spring Batch  (0) 2017.08.21