지금까지 남겨진 로그는, 콘솔에서만 확인 가능한 로그였다!
개발자는 로깅을 통해 사용자의 행동에 대한 통계 및 분석을 확인할 수 있으며, 예상치 못한 문제가 발생했을 때 당시 정보를 파악할 수 있는 등, 여러 방면으로 기록된 로그
를 활용할 수 있다
하지만, 로그를 남기는 것에도 리소스적인 비용이 발생하기 때문에 무조건 로그를 많이 남기는 것보다는 운영되는 시스템에 맞게 적절한 로그만을 남기는 것이 좋다
logback-spring.xml
은 로글성 데이터에 대한 상세 설정이 필요할 때 사용되는 파일
스프링 부트를 사용한다면 src/main/resources
경로에 있는 해당 파일을 참조해서 로그에 대한 설정을 하게 된다
이 때, 스프링 부트에서 로깅 관련 설정을 읽어 들이는 순서가 굉장히 중요하다
- classpath(resources 디렉터리 아래)에 logback-spring.xml 파일이 있으면 해당 파일의 설정을 읽습니다.
- logback-spring.xml 파일이 없는 경우 .properties(또는 .yml) 파일의 설정을 읽습니다.
- logback-spring.xml 파일과 .properties(또는 .yml) 파일이 동시에 있을 경우 .properties(또는 .yml) 파일의 설정이 적용된 후 logback-spring.xml 파일의 설정이 적용됩니다.
나는 이 3번에 대한 내용을 제대로 인지하지 못해서,
이 외에도 정말 기가막힌 등등..🫨 의 상황을 겪었다
나는 콘솔에는 INFO
레벨부터 찍히고,
로그 파일에는 ERROR
레벨부터 찍히게 하고 싶었다
logging:
level:
root: info
일단, yml 파일에 logging level을 info로 설정하여서 콘솔에는 INFO
레벨의 로그부터 찍히도록 하였고
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<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} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n</pattern>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<file>./logs/error.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./logs/archived/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="error">
<appender-ref ref="file"/>
</root>
</configuration>
logback-spring.xml 파일의 설정에서는
파일에 저장되는 로그는 ERROR
부터 찍힐 수 있도록 명시해두었다!
이렇게 설정했더니 정말 언제 그랬냐는 듯... 말짱해짐... 🙄
logback-spring.xml 파일 작성 방식을 더 많이 찾아보아야 할 것 같다