실제 배포돼 운영되는 웹 어플리케이션에 문제가 발생할 경우 장애가 발생했을때 발생이유와 시점을 모른다면 코드를 일일이 실행시켜 확인해야하기 때문에 시간적,인적 자원낭비를 일으킬수 있습니다. 따라서 로깅 프레임워크 Logback을 공부해 기록된 로그를 활용한 오류 디버깅과 운영 중인 프로그램 상태 모니터링으로 문제지점 파악 시간을 단축시켜 개발 효율성 증대를 이루는것이 이번 공부의 목적입니다!
Logback이란 오랫동안 검증된 Log4j 아키텍처를 기반으로 개발된 로깅(Logging) 프레임워크 입니다.
Logback은 일반적으로 classpath의 logback 파일을 참조하지만 Spring boot의 경우 src/main/resources/ 아래에 logback-spring.xml로 설정해야 합니다.
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger{30} %msg%n</pattern>
</encoder>
</appender>
<appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./application_log/application.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./application_log/application.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50KB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- Logger -->
<logger name="com.application" level="INFO"/>
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
</root>
</configuration>
😃 src/main/resources/ 아래에 logback-spring.xml을 생성하고 위설정대로 정의한뒤 재시작 하시면 콘솔창과 파일에 로그가 출력 됩니다. 세부설명은 밑에서 하겠습니다!
Appender
📘 가장 많이 쓰이는 것은 콘솔에 출력하는 ConsoleAppender 와 파일에 출력하는 RollingFileAppender 라고 합니다 😁
File
Filter
Encoder
Pattern
✱패턴
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger{30} %msg%n</pattern>
✱출력 예시
[2022-08-02 17:09:42.080] [INFO ] [restartedMain] o.s.b.w.e.t.TomcatWebServer Tomcat started on port(s): 8080 (http) with context path ''
Rolling Policy
✱Rolling Policy
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./application_log/application.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50KB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
✱출력
maxFileSize: 50KB
fileNamePattern: ./application_log/application.log.%d{yyyy-MM-dd}.%i.log
50kb 초과시 기존 파일의 이름이 fileNamePattern에 작성된 대로 변경되어 저장되고 새로운 파일로 rollOver됨
Root
✱Root
<logger name="com.application" level="INFO"/>
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
</root>
logback을 사용해보고 정리해보는 시간을 가져보았습니다! 첫포스팅이라 굉장히 어색하고 부끄럽습니다..ㅎ 틀리거나 문제 될게 있다면 지적해주시면 감사하겠습니다 🥹 다들 좋은하루 보내시고 대성하시길 바랍니다 ! 파이팅
https://jeong-pro.tistory.com/154 [기본기를 쌓는 정아마추어 코딩블로그]
https://wbluke.tistory.com/51
https://ckddn9496.tistory.com/79 [초보개발자 긍.응.성]