본문 바로가기
Dev/Spring

스프링부트 logback 적용하기

by ssyoni 2022. 7. 24.
반응형

기존에 스프링 부트 버전 업을 하면서 groovy로 작성된 logback파일을 xml으로 다시 재 작성할 일이 있었는데 직접 log 설정을 구성해본 적이 없어서 잠깐 삽질을 했었다. 기본 개념은 확실하게 알고 가자는 의미로 logback 설정 관련 개념을 간단하게 정리해보았다. 

 

🌿 스프링부트에서  logback 사용하는 방법

스프링에서는 classpath 내에 있는 logback.xml 에서 설정을 해주는데 springboot에서는 resources 폴더 내에 설정 파일들을 관리하게 된다. 때문에 기본적으로 스프링 웹 애플리케이션이 시작되고 classpath 안에 있는 logback.xml을 읽어오는데, 이 때는 Spring이 구동되기 전이기 때문에 resources  폴더 내의 설정 파일들을 불러올 수 없다. 스프링 부트에서 logback을 적용할 시에는 logback-spring이라고 명시해주자. 

 

 

🌿  기본적으로  알아야 할 설정 파일의 주요 항목 

TRACE < DEBBUG < INFO < WARN < ERROR < OFF

 

 출력 레벨 설정에 따라 설정레벨 이상의 로그를 출력한다. 

행(p) : 출력 레벨,  열(q) : 유효 레벨

ex) 출력 레벨이 WARN이라면 TRACE, DEBUG, INFO는  출력되지 않는다. 

 

 

 

🌿  logback 주요 설정 요소 Logger, Appender

Logger : appender를 참조하여 package와 level을 설정 

root : root 는 말 그대로 최상위 레벨의 logger를 설정해준다. 

Appender : log의 형태를 설정  (console, file, DB appender ...)

 

logger & root

logger : logger 마다 name을 부여하여 사용한다. 또한 각 logger마다 출력 레벨을 설정할 수 있으며 로깅 메시지는 로그 레벨에 따라 Appender로 전달된다. 기본적으로 최상위 로거인 root logger를 설정해주어야 한다. 

root  : 단일 속성의 레벨을 지원한다. 말 그대로 최 상위 root이기 때문에 다른 속성은 따로 없으며 name속성도 허용하지  않는다. 레벨 속성의 값은 5가지 레벨의 로그 값들이 대소문자 상관없이 들어간다. 

logger와 root 모두 0개  이상의 <appender-ref>라는 하위 속성을 갖는다. appender-ref 속성에는 참조할 Appender의 name을 명시해준다. 

 

Example

로거 설정 

<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>

  <logger name="chapters.configuration" level="INFO"/>

  <!-- 루트 레벨은 기본적으로 DEBUG로 설정된다  -->
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>

result

17:34:07.578 [main] INFO  chapters.configuration.MyApp3 - Entering application.
17:34:07.578 [main] INFO  chapters.configuration.MyApp3 - Exiting application.

 

 

여러 로거 레벨 설정 

<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>

result

17:39:27.593 [main] INFO  chapters.configuration.MyApp3 - Entering application.
17:39:27.593 [main] DEBUG chapters.configuration.Foo - Did it again!
17:39:27.593 [main] INFO  chapters.configuration.MyApp3 - Exiting application.

 

 

🌿  Appender 설정 

Appender 속성은 0개 이상의 <layout>, <encoder>, <filter> 요소를 포함한다. 

appender 종류는 ConsoleAppender, FileAppender, RollingAppender, DBAppender, RollingAppender, SMTPAppender 등이 있다. (참고로 DBAppender는 현재 지원 안 함)

 

제일  대표적인 Appender에서 간략하게 설명해보자면 

ConsoleAppender는 콘솔에 로그를 출력한다. 

FilAppender는 파일에 로그를 저장하며 로그파일 저장 기간이나 파일 이름 형식을 지정해줄 수 있다. 

RollingFileAppender(FileAppender를 상속 받음)는 여러 개의 파일을 롤링하며 로그를 찍는다. 로그 파일 저장 용량을 설정하면 용량 초과 시 새로운 log file을 생성한다. 

SMTPAppender는 로그를 메일로 보낸다. 

DBAppender는  말 그대로 DB에 로그를 쌓는 것. logback.db 버전 1.2.1부터는 보안 취약점 때문에 DBAppender를 지원하지 않는다. 대신 아래의 Maven 설정을 해줌으로써 사용할 수 있다. 

// for logback-classic
ch.qos.logback.db:logback-classic-db:1.2.11.1
// for logback-access
ch.qos.logback.db:logback-access-db:1.2.11.1

 

 

 

<💡참고>

  • logback은 groovy 언어로도 지원을 했었는데, groovy를 사용한 로깅 범위가  매우 광범위하고 구성이 강력해서 보안상의 이유로 logbback 1.2.9 릴리즈 버전부터는 지원을 중단했다.  
  • logback 버전 0.9.17 이후부터 태그 이름은 대소문자를 구분하지  않는다. 대신 xml 형식 규칙은 여전히 적용되기 때문에 </xyz>로 연 태그는 </xyz>로 닫아야 한다. 
  • 암묵적으로 CamelCase 규칙을 따른다. 

 

 

 

 

 

https://logback.qos.ch/manual/configuration.html#autoScan

 

Chapter 3: Configuration

Chapter 3: Logback configuration In symbols one observes an advantage in discovery which is greatest when they express the exact nature of a thing briefly and, as it were, picture it; then indeed the labor of thought is wonderfully diminished. —GOTTFRIED

logback.qos.ch

https://logback.qos.ch/news.html

 

News

Logback News You can receive logback-related announcements by subscribing to the QOS.ch announce mailing list. 2022-05-19 Release of logback version 1.3.0-alpha16 The 1.3.x series is JPMS/Jigsaw/Java 9 modularized and requires slf4j-api version 2.0.x. How

logback.qos.ch

https://stackoverflow.com/questions/70626868/logback-classic-1-2-8-dbappender-missing

 

Logback-classic 1.2.8 DBAppender Missing

I'm trying to upgrade the logback-classic library from version 1.2.3 to 1.2.8. The patch notes say that all DB related code has been removed, so the main DBAppender class no longer exists in the new

stackoverflow.com

 

반응형

댓글