[Spring] Logback 기반 모니터링
Spring에서 Logback을 이용한 모니터링을 통해 서버의 동작 및 데이터에 관한 기록을 남겨보자
Apr 17, 2024
✅ 모니터링을 왜 해야할까?
모니터링은 시스템, 애플리케이션, 네트워크 또는 IT 인프라의 기타 구성 요소의 성능, 가용성 및 동작에 대한 데이터를 관찰, 측정 및 수집하는 프로세스를 의미한다. 모니터링의 주요 목표는 이러한 시스템이 올바르게 작동하고 사전 정의된 성능 기준을 충족하는지 확인하는 것이다. 모니터링은 IT 환경의 상태, 안정성, 보안을 유지하고 사전에 문제를 감지하고 해결하는 데 중요한 역할을 한다.
✅ Logback이란?
Logback은 널리 사용되는 log4j 로깅 프레임워크의 후속 버전으로 설계된 Java 애플리케이션용 로깅 프레임워크이다. 유연성, 구성 가능성 및 성능으로 인해 엔터프라이즈 수준 Java 프로젝트에서 널리 사용된다. Logback은 디버그, 정보, 경고, 오류 등 다양한 세분성 수준의 로깅을 지원하므로 개발자는 애플리케이션에서 다양한 유형의 이벤트와 메시지를 캡처할 수 있다.
주요 기능
로거
: Logback은 로거를 사용하여 애플리케이션 내의 소스 또는 목적에 따라 로그 메시지를 분류한다. 개발자는 코드베이스 또는 모듈의 서로 다른 부분을 구별하기 위해 여러 로거를 만들 수 있다.
어펜더
: Logback은 로그 메시지가 출력되는 위치를 정의하는 다양한 유형의 어펜더를 제공한다. 예로는ConsoleAppender
(콘솔에 로깅용),FileAppender
(파일에 로깅용) 및SocketAppender
(원격 서버에 로깅용)가 있다.
레이아웃
: Logback을 사용하면 개발자는 레이아웃을 사용하여 로그 메시지 형식을 사용자 정의할 수 있다. 여기에는 타임스탬프 형식, 로그 수준, 로거 이름 및 실제 로그 메시지 자체가 포함된다.
필터
: Logback은 로그 수준, 로거 이름 또는 사용자 정의 속성과 같은 다양한 기준을 기반으로 로그 메시지 필터링을 지원한다. 필터를 사용하면 개발자는 특정 조건에 따라 출력되는 로그 메시지를 제어할 수 있다.
구성
: Logback의 구성은 프로그래밍 방식으로 수행하거나 외부 구성 파일(일반적으로 XML 또는 Groovy)을 통해 수행할 수 있다. 이러한 유연성 덕분에 개발자는 애플리케이션 코드를 수정하지 않고도 로깅 동작을 미세 조정할 수 있다.
성능
: Logback은 성능 효율성으로 잘 알려져 있어 처리량이 많은 애플리케이션에 적합하다. 오버헤드를 최소화하고 리소스 사용을 최적화하여 애플리케이션 성능에 미치는 영향을 최소화하도록 설계되었다.
통합
: Logback은 다른 Java 프레임워크 및 라이브러리와 원활하게 통합되므로 기존 프로젝트에 쉽게 통합할 수 있다. 일반적으로 Spring, Hibernate 및 Apache 라이브러리와 같은 널리 사용되는 프레임워크와 함께 사용된다.
✅ Logback을 통해 모니터링 하기
1. 파일 생성 위치
스프링에서는 기본적으로 프로젝트의
resources
디렉토리 하위에 있는 logback.xml
혹은 logback-spring.xml
파일을 참조하게 되어있다. 따라서, 프로젝트 resources
디렉토리에 해당 파일을 생성한다.2. 파일 내용
→ 로그백 홈페이지에 매뉴얼에 나와있는 대로 복사하여 붙여넣기를 한다. (기본 포맷이다)
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
→
-%kvp
는 지원하지 않으므로 일단 뺀다.파일에 위 코드를 입력하고 실행하면, 아래와 같은 로그들이 출력된다. 위 코드에서
pattern
에 맞게 출력되는 것을 확인할 수 있다.위 코드에서는
level=”debug”
로 되어있어서 많은 로그를 출력하는데, level=”INFO”
로 설정하면 핵심적인 로그만 확인할 수 있다.3. 콘솔 말고 파일에 로그 남기기
→ 위 사이트에 들어가서 RollingFileAppender를 찾아서 사용한다. (다른 것도 가능하다.)
내리다 보면 코드가 있다.
→ 여기서 appender 부분만 복사하여 기존 로그백 파일에 붙여넣는다.
→ 위 코드에서 fileNamePattern 부분의 yyyy-MM-dd 부분에서 시간 단위 혹은 분 단위까지 설정할 수 있다. 만약, 시간단위로 설정하려고 HH를 붙인다면 로그를 남기는 단위가 1일이 아니라 1시간으로 바뀐다. 그리고 mm까지 붙이면 1분으로 바뀌는 것이다.
→ maxHistory는 최대 몇 개의 로그 파일을 기록할 것인지에 대한 내용이다. (가장 최신 3개 파일만 남겨둔다.)
→ 그리고 맨 위에 .zip을 붙이면 압축파일 형태로 저장해준다.
나는 HH과 mm까지 추가해서 작성하였다. 아래는 지금까지 최종
logback.xml
코드이다.→ 기록을 많이 남기기 위해 디버그 레벨로 바꾸었다.
→ 레퍼런스를 STDOUT과 FILE 두 가지 모두 설정하여, 콘솔과 파일 모두에 기록을 남기도록 했다.
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%class] [%method] [%line] %msg %n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logFile.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>logFile.%d{yyyy-MM-dd_HH_mm}.log.zip</fileNamePattern> <!-- 압축파일로 저장 --> <!-- keep 30 days' worth of history capped at 3GB total size --> <maxHistory>3</maxHistory> <!-- 최대 3개까지만 저장 --> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%class] [%method] [%line] %msg %n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
→ 이제, 실행한 뒤 디스크 리로드를 하면 아래 로그 파일이 생긴다.
→ 1분 마다 로그 기록이 담긴 압축 파일이 생기는 것을 확인할 수 있다.
Share article