로컬환경에서 개발을 하다보면 콘솔을 통해서 로그를 확인하는 것이 당연하다. 운영 단계에서 동작 중인 EC2 인스턴스의 로그를 확인하려니 tail 커맨드로 로그를 라이브로 확인하는게 불편해지기 시작했다.
Springboot 프로필을 로컬과 운영으로 나누어뒀기 때문에 로컬에선 콘솔로 로그가 찍히게, 운영에선 log파일로 로그가 저장되게 하고자 한다. 추가로 운영에선 로그 파일을 두개 만들고자 하는데, 하나는 DEBUG부터 ERROR까지 로그가 쌓이게, 다른 하나는 WARN부터 ERROR까지 로그가 저장되게 할 생각이다.
implementation("org.springframework.boot:spring-boot-starter-web")
스프링부트에 Logback 구현체가 들어있어, 추가적인 라이브러리는 필요가 없다.
먼저 정상동작하는지 확인하기 위해, FileAppender만 추가하여 루트로거를 INFO 레벨부터 로그를 저장할 수 있게 해보았다.
logback-spring.xml 파일의 기본 내용이다.
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>planearLog.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- root logger 설정 -->
<root level="INFO"> <!-- 여기서 로그 레벨을 info로 설정 (DEBUG, TRACE는 저장 X) -->
<appender-ref ref="FILE" />
</root>
</configuration>

절대경로 지정 없이 파일명만 입력해 상대경로로 저장해두면 src안에 log파일이 저장되는 것을 알 수 있다.
이번엔 로컬 환경에서 로그파일을 두 개 관리하는 과정을 진행해보려고 한다.
하나의 로그파일은 일상적인 로그를 저장하고 (DEBUG - ERROR) , 다른 하나는 수정이 필요한 에러로그만 저장(WARN-ERROR)하려고 한다.
LevelFilter가 아닌 ThresholdFilter를 사용했다.
<configuration>
<!-- INFO부터 ERROR까지 기록하는 파일 설정 -->
<appender name="ORDINARY" class="ch.qos.logback.core.FileAppender">
<file>planearLog.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- WARN부터 ERROR까지 기록하는 파일 설정 -->
<appender name="HOTFIX" class="ch.qos.logback.core.FileAppender">
<file>hotfixLog.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<!-- 콘솔 확인을 위한 출력-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- root logger 설정 -->
<root level="INFO">
<appender-ref ref="ORDINARY" />
<appender-ref ref="STDOUT" />
</root>
<!-- org.springframework 패키지의 WARN 이상의 로그는 HOTFIX에 기록 -->
<logger name="org.springframework" level="WARN">
<appender-ref ref="HOTFIX" />
</logger>
</configuration>
일상 로그 파일과 경고 로그 파일이 잘 저장되는 것을 확인했다.


이번엔 프로필에 맞게 로컬은 콘솔 출력만, 운영은 파일로 저장을 분리시켜 보려고 한다.

properties는 local와 prod 두 개의 파일이 존재한다.
<configuration>
<springProfile name="prod">
<!-- INFO부터 ERROR까지 기록하는 파일 설정 -->
<appender name="ORDINARY" class="ch.qos.logback.core.FileAppender">
<file>planearLog.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- WARN부터 ERROR까지 기록하는 파일 설정 -->
<appender name="HOTFIX" class="ch.qos.logback.core.FileAppender">
<file>hotfixLog.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="ORDINARY" />
</root>
<!-- WARN 이상의 로그는 HOTFIX에 기록 -->
<logger name="org.springframework" level="WARN">
<appender-ref ref="HOTFIX" />
</logger>
</springProfile>
<springProfile name="local">
<!-- 콘솔 확인을 위한 출력-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</springProfile>
</configuration>
프로필을 명시하여 구분지어 xml을 작성해, 로컬에서 애플리케이션을 동작시켰고, log파일 생성 없이 콘솔 로그만 출력되는 것을 확인할 수 있었다.
롤링 정책을 채택할 경우 로그파일의 용량 혹은 하루별 로그파일 생성 둘 중 하나를 고를 것 같은데, 일상 로그가 아닌 위험 로그들은 DBAppender를 통해 DB에 저장하는 방법까지 고려해봐야 할 것 같다.
https://goddaehee.tistory.com/206
[스프링부트 (5)] Spring Boot 로그 설정(1) - Logback
[스프링부트 (5)] Spring Boot Log 설정(1) - Logback 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 Log 설정 - 로그백] 입니다. : -) 1. Logback 이란? 특징? - 자바 오픈소스 로깅 프레임워크, SLF4J의
goddaehee.tistory.com
[Spring] 에러 로깅하기 - Logback을 사용해서 ERROR 레벨만 파일로 로그를 남겨보자!
🌱 들어가기 전 이번 장바구니 미션에서는 프론트 크루들과 협업을 해야 했기 때문에 앞으로 에러 로그를 볼 일이 많아질 것 같다고 생각했다. 배포 스크립트를 작성하면서 스프링이 띄워질 때
cl8d.tistory.com
https://ajdahrdl.tistory.com/231
[Spring Boot] LogBack 설정
안녕하세요. 이번 포스팅에서는 LogBack 설정 방법에 대해서 적어보려고 합니다. 1. LogBack? Java에서 가장 많이 사용되었던 로깅 라이브러리인 log4j의 후속 버전 Log4j를 더욱 성능을 좋게 만든 Java의
ajdahrdl.tistory.com
'Backend' 카테고리의 다른 글
| [Springboot] DTO-Entity 변환 위치는 어디가 적합할까 (2) | 2024.07.03 |
|---|---|
| [Springboot] 난수 생성엔 Random보다 SecureRandom을 사용하자. (0) | 2024.07.03 |
| [Springboot] Sentry 에러 로그 수집기 설정하기 (1) | 2024.06.24 |
| [AWS] Springboot 3.x S3적용 기록 (4) | 2024.05.31 |
| [ IntelliJ ] Springboot 초기설정 - 빌드 방식 차이점 (0) | 2024.05.10 |