Development Logs/Spring Ecosystem

[Spring Boot] Spring Boot에서의 Logging Pattern 설정

유뱅유뱅뱅 2023. 8. 4. 17:28
  • Spring Boot에서의 Logging Pattern 설정을 위해 Log와 관련된 간단한 지식을 정리한 글입니다.
  • Logging Pattern 설정과 관련된 내용입니다.

1. Logback이란?

  • Java에서 Log 기록을 위한 Open-Source framework.  SLF4J의 구현체입니다.
  • Spring Boot에서는 default로 설정되어 있어서 사용 시 별도로 라이브러리를 추가하지 않아도 됩니다.
  • spring-boot-start-web 안에 spring-boot-starter-logging에 구현체가 있습니다.
  • Logback을 이용하여 logging 하기 위해서 필요한 주요 설정 요소로는 Logger,  Appender, Encoder의 3가지가 있습니다.

  

2. Spring Boot  logback 설정파일

Spring Boot의 경우에는 아래 3가지 중 한 가지 방법을 선택합니다.

  • application.properties에 설정
  • resources/logback-spring.xml에 설정
  • resources/logback.xml에 설정

→ 해당 글에서는 appilcation.yml파일에 설정하였습니다.

 

3. Log level 순서 및 사용 방법

TRACE  < DEBUG < INFO < WARN < ERROR

  • ERROR: 요청을 처리하는 중 오류가 발생한 경우 표시
  • WARN: 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 표시
  • INFO:  상태 변경과 같은 정보성 로그를 표시
  • DEBUG: 프로그램을 디버깅하기 위한 정보를 표시
  • TRACE: 추적 레벨은 DEBUG보다 훨씬 상세한 정보를 표시

위의 순서대로 높은 레벨을 가집니다. 출력  레벨의 설정에 따라 설정 레벨 이상의 로그를 표시합니다. 예를 들어 LEVEL을 INFO로 하였을 경우 INFO, WARN, ERROR LEVEL을 표시합니다.

 

4. application.yml에서 logging.pattern 설정

4.1. logging.pattern 속성

logging.pattern 속성은 Spring Boot의 로그 출력 패턴을 구성하는 데 사용되는 여러 하위 속성들을 포함합니다. 주요하게 사용되는 하위 속성은 다음과 같습니다:

  1. logging.pattern.console: 콘솔에 출력되는 로그의 패턴을 지정합니다. 콘솔 로그 출력 형식을 설정할 때 사용됩니다.
  2. logging.pattern.file: 파일 로그의 패턴을 지정합니다. 파일 로그 출력 형식을 설정할 때 사용됩니다.
  3. logging.pattern.level: 로그 레벨 패턴을 지정합니다. 로그 레벨을 출력 형식에 포함시킬 때 사용됩니다.
  4. logging.pattern.dateformat: 로그 메시지의 날짜 형식을 지정합니다. %d 패턴을 사용하여 로그 메시지에 날짜를 포함시킬 때 사용됩니다.
  5. logging.pattern.exception: 예외 발생 시 예외 정보를 출력하는 패턴을 지정합니다. %ex 패턴을 사용하여 예외 스택 트레이스를 로그에 출력할 때 사용됩니다.
  6. logging.pattern.file.max-history: 파일 로그의 최대 보관 기간을 지정합니다. 로그 파일 보관 기간을 설정할 때 사용됩니다.
  7. logging.pattern.file.max-size: 파일 로그의 최대 크기를 지정합니다. 로그 파일 크기를 설정할 때 사용됩니다.

위의 하위 속성들은 logging.pattern 아래에서 로그 출력 패턴을 구성하는 데 사용됩니다. 각 하위 속성은 특정한 로그 출력 형식을 설정하기 위해 다양한 패턴을 지정할 수 있습니다. 로그 출력을 필요에 맞게 조정할 때 이러한 하위 속성들을 활용할 수 있습니다.

4.2. logging.pattern에서 자주 사용되는 요소들

  • %d: 날짜와 시간을 나타냅니다. 기본 형식은 yyyy-MM-dd HH:mm:ss.SSS입니다. 날짜와 시간 형식을 지정할 수도 있습니다.
  • %p: 로그 레벨을 나타냅니다. 주로 "TRACE", "DEBUG", "INFO", "WARN", "ERROR" 등의 값이 사용됩니다.
  • %thread: 현재 스레드 이름을 나타냅니다.
  • %t: 로깅이 발생한 스레드 이름을 나타냅니다
  • %c: 로그를 출력하는 클래스의 이름을 나타냅니다.
  • %C: 로그를 출력하는 클래스의 간결한 이름(패키지명 없이)을 나타냅니다.
  • %M: 로그를 출력하는 메서드의 이름을 나타냅니다.
  • %L: 로그를 출력하는 코드 라인 번호를 나타냅니다.
  • %m: 로그 메시지 자체를 나타냅니다.
  • %n: 개행 문자를 나타냅니다.
  • %r: 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간(ms)
  • %-5level: 로그 레벨, -5는 출력의 고정폭 값(5글자)
  • %logger{36}: 로그네임(className)를 나타냅니다.(36글자)
  • %msg: 로그 메시지 (=%message)
  • ${PID:-}: 프로세스 아이디
    • - 는 값을 의미하며, 값이 없는 경우, 빈 문자열로 대체됩니다.

 

5. Spring boot에서 Logging Pattern Test

5.1. 기본 Log 포멧

  • logging.pattern에 아무것도 설정하지 않았을 때를 의미합니다.
  • 날짜와시간 / 로그레벨 / 프로세스ID / 구분자 / 스레드명 / 로그네임(className)/ 로그 메시지
    • 로그네임은 너무 길면 잘릴 수 있습니다.
    • 스프링 부트의 기본적인 로그레벨은 INFO 입니다.
      • (아래 그림에서는 application-local.yml 파일에서 logging.level을 DEBUG로 설정해둔 상태임)
    • 로그 확인

Spring Boot의 기본 Log

 

5.2. Log 포맷 - 로그레벨 설정

  • 기본 Log 포맷에서 2번째 부분인 로그레벨만 포맷 설정이 가능합니다.
  • application.yml 파일 설정
    • logging.pattern.level 을 추가해봅니다.
      • %5p : 로그레벨을 5글자로 한다.
      • 그 외, 정보($로 되어있는 정보들)들을 로그레벨에 추가해보았습니다.
      •  
      • logging: pattern: level: "%5p [elders:},%X{traceId:-},%X{spanId:-}]"
  • 로그 확인
    • 로그레벨을 나타내는 2번째 부분(초록색)이 바뀐것을 확인할 수 있다.

logging.pattern.level 적용된 후 Log

 

5.3. Log 포맷 - 전체 포맷 로그 설정

  • 기본 Log 포맷의 전체 부분을 설정할 수 있습니다.
  • application.yml 파일 설정
    • logging.pattern.console 을 추가해봅니다.
    • 기본 로그 포맷에서 필요한 부분들을 수정합니다.
      • 날짜와시간 / 로그레벨 / 프로세스ID / 구분자 / 스레드명 / 로그네임(className)/ 로그 메시지
      • 날짜와시간 : %d{yyyy-MM-dd HH:mm:ss.SSS}
      • 로그레벨 : [%5p] %clr([elders},%X{traceId:-},%X{spanId:-}])
      • 프로세스ID : [${PID:-}]
      • 구분자 : --- , >>>
      • 스레드명 : [%15thread]
      • 로그네임(className) : %clr([%logger{36}])
      • 로그 메시지 : %msg %n
    • logging:
        pattern:
          console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] %clr([elders:},%X{traceId:-},%X{spanId:-}]) [${PID:-}] --- [%15thread] %clr([%logger{36}]) >>> %msg %n"
  • 로그 확인
    • %clr 한 부분들은 spring boot에서 제공하는 색으로 console에 찍히는 log가 수정된다.

logging.pattern.console 적용 후 Log

 

5.4. Log 포맷 - level, console 동시 설정

  • application.yml 파일 설정시, logging.pattern.level과 logging.pattern.console을 같이 설정하게 되면, logging.pattern.level의 설정 값이 무시됨
  • application.yml 파일 설정
    • logging:
        pattern:
          level: "%5p [elders:},%X{traceId:-},%X{spanId:-}]"
          console: "%msg %n"
  • 로그 확인
    • logging.pattern.console에서 설정한 %msg(로그메시지)만 찍히고 있는걸 확인할 수 있다.

logging.pattern.level, logging.level.console이 적용된 후 Log

 

Reference