기존에 스프링 부트 버전 업을 하면서 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
출력 레벨 설정에 따라 설정레벨 이상의 로그를 출력한다.
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
https://logback.qos.ch/news.html
https://stackoverflow.com/questions/70626868/logback-classic-1-2-8-dbappender-missing
'Dev > Spring' 카테고리의 다른 글
[SpringBoot] 테스트 케이스를 위한 설정파일 만들기 (0) | 2022.02.10 |
---|---|
[SpringBoot] JUnit5 - @ParameterizedTest, @ValueSource, @CsvSource (0) | 2022.02.05 |
[SpringBoot] 스프링부트에서 캐싱하기 (Cache in Springboot) (0) | 2022.02.05 |
[Spring] Filter, Interceptor (0) | 2022.02.05 |
[Spring] AOP(Aspected-Oriented Programming) (0) | 2022.02.05 |
댓글