SpringBoot(스프링 부트) logback 설정하기

Daniel·2024년 11월 21일
0

Back-End

목록 보기
44/48

들어가며

이번에 개발한 프로젝트에 logback 을 적용해 각 환경별 (local, test, real) .xml 의 설정을 구성해 로그를 관리해보았다.
경험하고 학습한 내용을 정리해 보려한다.

설정 전

필자가 이번에 개발한 프로젝트는 SpringBoot 3.3.2 버전으로 설정이 되어있다.
스프링 부트는 기본적으로 logback 로깅 프레임 워크를 지원한다.
트레픽이 많거나 처리가 많을 것 같은 프로젝트라면 성능이 더 좋다는 log4j2 를 사용하겠지만, 그 정도는 아니라서 logback 을 사용하기로 했다.

spring-boot-starter-web 라이브러리 내부에 내장되어 있어서 스프링 부트 프로젝트를 초기화할 때 넣어주면 자동으로 주입된다.
lombok 어노테이션도 함께 주입하면 아래와 같이 사용할 수 있다.

classpath 에 사용자 정의 logback 설정파일이 없을 경우
org.springframework.boot.logging.logback 경로에 내장된 기본 구성인 base.xml 을 사용한다.

<?xml version="1.0" encoding="UTF-8"?>  
  
<!--  
Base logback configuration provided for compatibility with Spring Boot 1.1  
-->  
  
<included>  
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />  
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>  
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />  
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />  
    <root level="INFO">  
       <appender-ref ref="CONSOLE" />  
       <appender-ref ref="FILE" />  
    </root>  
</included>

필자는
로컬 환경 에서는 기본 구성을 사용하는 환경
개발 환경 에서는 기본 구성을 사용하되, 테스트(로그 파일저장 등) 를 위한 동적 변경 가능한 환경
운영 환경 에서는 로그 출력을 레벨에 따라 파일저장, 슬랙 봇을 사용한 슬랙 알람 기능 구현
위 목표들에 맞추어 설정을 하려한다.

설정 단계

필자의 프로젝트는 spring profiles 에 따라 로컬(local), 개발(test), 운영(real) 환경들의 설정들을 분리해 놓았다.

스프링 공식문서를 확인하니 친절하게 logback 설정도 profile 별 구성설정을 하는 방법이 나와있어 따라가보았다.

위처럼 클래스패스(resources/)에 logback-spring.xml 파일을 생성 후 각 환경별 틀? 을 잡아주고 로컬 환경 을 적용시켜 보았다.
로컬 환경: 기본 구성 사용 기본 구성을 사용하기 위해 스프링부트에 내장된 base.xml 을 include 하면 되지만
<include resource="org/springframework/boot/logging/logback/base.xml"/> 필요없는 FILE Appender 까지 설정되어서 그 부분은 빼고 가져왔다. (base.xml 을 include 할 경우 아래와같이 컴퓨터에 spring.log 가 생성된다.)

개발 환경 설정

개발 환경 에서는 기본 구성을 사용하되, 테스트(로그 파일저장 등) 를 위한 동적 변경 가능한 환경 을 만들어야 한다.

개발 환경을 짬뽕이라고 표현할 수 있겠다.

기본 구성, 여러 파일에 나눠서 저장, 추후 운영에 반영될 Appender 테스트, ... 등등 여러 Appender 들이 추가되어야 한다.

위 처럼 개발 및 운영 환경 에 반영될 Appender 를 설정해 주었다.
(파일 롤링 Appender)

이제, 가져다 사용하기만 하면 된다.

Appender 설정 부분을 보면 INFO 레벨 이상의 레벨들은 system-xxx.log 파일에 기록되고,
ERROR 레벨의 로그만 특별히 error-xxx.log 파일에 기록 되도록 설정해 두었다.

프로파일 을 test 로 설정하고 실행 시켜보자!

콘솔에도 잘 나오고, classPath 로 설정한 resources 하위 /logs 안 파일들이 생성되었다!

어라? 나는 분명 ${logDir}/system또는error-%d{MM-dd-yy}_%i.log 로 파일 이름을 설정했는데 적용되지 않았다.
찾아보니 <file></file> 속성과 같이 사용하면 충돌이 발생한다고 한다.
해당 속성을 제거해 주고 <proerty /> 속성도 test 환경에서만 사용하니깐 아래와 같이 옮겨주었다.

다시 실행시켜 보면 아래와 같이 파일이 잘 생성되었다!

system-xxx.log 를 열어보면 스프링 부트 배너가 빠진채 기록된 걸 확인할 수 있을텐데 이 문제는 logback 이 초기화되기 전에 배너가 인쇄되므로 표시되지 않는다.

운영 환경 설정

운영 환경 에서는 현재 로그 출력을 레벨에 따라 파일저장, 슬랙 봇을 사용한 슬랙 알람 기능 구현 을 사용하고 있다.

개발 환경 설정과 다른 점은 슬랙 연동 Appender 를 사용한다는 점인데 이 부분은 해당 포스트의 주제와 맞지않아 추후 포스팅 하겠다.

Note

스프링 부트 프로젝트에 logback 설정을 하며 정리한 포스트이다.
다음엔 더욱더 복잡한 설정도 도전해 봐야겠다.

profile
응애 나 애기 개발자

0개의 댓글