⌨️ 기존 로그 관리에서 불편한 점들을 고려하여 개선
기존 로그 관리는 EC2에서 nohup.txt 파일을 생성해서 관리하는 방식이었기 때문에,
직접 인스턴스의 파일을 보지 않고선 확인이 힘들었다. 해당 부분을 개선하고자 logback을 적용했다
1. logback
logback은 log4j 이후에 출시된 Java 기반 Logging Framework 중 하나로 가장 널리 사용되고 있으며,
SLF4j의 구현체이다.
우리는 Boot를 사용한 환경이라 별도의 dependency 추가 없이 사용할 수 있으므로 logback을 선택했다.
1.1. defaults.xml
별도의 로그 구현 없이도 기본적으로 콘솔에 로그가 찍혀 나온다.
이는 따로 logback.xml을 생성하지 않는 다면 Spring boot에서 기본적으로
org/springframework/boot/logging/logback/defaults.xml
해당 위치에 있는 defaults.xml로 로깅을 하기 때문이다.
1.2.. yaml(yml) vs logback.xml
우리는 쉽게 logging 레벨과 관련 설정들을 application.properties 파일에서 구현할 수 있다.
하지만 해당 방법은 개별적인 appender 들을 구현하기에는 살짝 불편한 감이 있어 따로 logback.xml 파일을 만드는 것을 선택했다.
해당 부분은 프로젝트의 사이즈와 로그 관리 전략에 따라 기호 꺼 선택하는 것이 괜찮을 것 같다.
하지만 앞으로의 확장성을 위해 logback.xml을 만드는 쪽을 습관화하는 것도 나쁘지 않다고 본다.
1.3. logback-spring.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="logback-spring-${spring.profiles.active}.xml"/>
</configuration>
각자 로그 파일을 만드는 방법은 다양하겠지만 기본적으로 logback은 워낙 문서화가 잘되어있어 사실 공식문서만 보고 공부해도 충분할 정도이다.
https://logback.qos.ch/documentation.html
Documentation
Logback documentation Below is a list of logback-related documentation currently available. Source code related documentation: Articles and Presentations In french
logback.qos.ch
이야기가 잠깐 또 샜지만, 우선 나는 파일의 분기를
logback-spring.xml로 들어가서 해당 파일이 하위의 profile들이 적용된 문서를 포함하도록 만들었다.
따라서 이 밑에는
logback-spring-prod.xml과 logbakc-spring-dev.xml 등 application.properties 와 대응되게 로그 파일들을 생성해서 관리하기로 했다
2. Local 환경에서의 logback
2.1. logback-spring-dev.xml
<included>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>
[CONSOLE2] [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] -%msg%n
</pattern>
</encoder>
</appender>
<root level="DEBUG">
<!-- <appender-ref ref="CONSOLE"/>-->
<appender-ref ref="CONSOLE2"/>
</root>
</included
로컬 환경에서의 로그는 간단히 실습용으로 넣어봤다
내가 원하는 appender가 정상적으로 작동하는지 pattern은 제대로 출력되는지 등 콘솔에서 원하는 값이 제대로 나오는지 먼저 확인을 했다.
* 당연하게도 로그백의 사용방법은 공식 docs를 보면 자세히 나와있기에 별도로 작성하진 않으려 한다.
공부를 할수록 느끼는 것이 공식 docs를 보는 능력을 길러야겠다는 판단이 들기 때문이다.
다행히도 내가 원하는 로깅레벨과 패턴이 잘 적용되었다.
문제는 prod에서인데 해당 부분이 골치가 아팠다.
3. Prod 환경에서의 logback
3.1. logback-spring-prod.xml
이 부분은 2가지로 나뉜다, 첫째로 local 환경에서 prod로 런해보기
내가 원한 fileAppender 가 제대로 작동해서 로그 파일을 생성해 주는 것을 보기 위함이다,
우선 여기까지는 문제없이 진행됐고 나아가 작성할 cloudwatch에 로그를 남기는 것까지 문제없이 진행됐다.
그러나 EC2 환경에서의 로깅이 제대로 되지 않았다. 해당 부분을 조금 더 보완하여 다시 작성하려 한다. 현재는 문제점을 찾고 있는 중이다.
3. 피드백
🌟REFERENCE
logback 공식 문서 : https://logback.qos.ch/documentation.html