Logback을 사용하면 간단하게 로그 관리를 할 수 있다. 로그 파일 생성, 일자별 생성, 파일 사이즈 기반 롤링 등 다양한 옵션을 제공하여 로그를 효과적으로 기록하고 관리할 수 있다.
Spring Boot Start로 프로젝트를 생성하면 [spring-boot-starter-logging]이 포함되어 있어 별도의 의존성을 추가할 필요 없이 사용 가능하다.
1. 사용 방법
1-1) src/resources/logback-srping.xml 파일 생성
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!-- 콘솔에 로그를 출력하는 설정 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 로그 파일에 로그를 출력하는 설정 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/Users/home/logs/server.log</file> <!--로그 파일 기본 경로-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 로그 파일의 이름 형식 지정 -->
<fileNamePattern>/Users/home/logs/server-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 하루 단위로 로그 파일 생성 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 로그 보관 기간 지정 (30일) -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 루트 로거 설정 -->
<root level="info">
<appender-ref ref="console"/> <!-- 콘솔과 파일 둘다 출력 -->
<appender-ref ref="file"/>
</root>
<!-- 특정 패키지 또는 클래스의 로깅 레벨 설정 -->
<logger name="jex" level="debug"/>
<logger name="com" level="debug"/>
</configuration>
- logger : 패키지, 클래스에 따른 로깅 레벨을 별도로 설정할 수 있다.
1-2) [Log Pattern 옵션]
로그를 출력하는 패턴 옵션
%d{yyyy-MM-dd HH:mm:ss} | 년-월-일 시간의 형식 출력 |
[%thread] | 이벤트를 발생시킨 스레드의 이름을 출력 |
%-5level | 로그 이벤트의 로그 레벨 출력 (로그 레벨을 최소 5자리 폭으로 출력하되, 왼쪽 정렬. 예를 들어, INFO는 4자리이므로 그 뒤에 한 칸의 공백이 추가된다.) |
%logger{36} | 이벤트를 발생시킨 로거의 이름을 출력 (로거 이름을 최대 36자리로 제한. 만약 로거 이름이 36자보다 길다면, 앞부분이 잘리고 마지막 36자가 출력된다. 이는 긴 패키지 이름을 가지는 경우 유용함) |
%msg | 로그 이벤트의 메시지를 출력 |
%n | 개행 문자 |
반응형
2. 파일 이름 or 위치를 변경할 경우
application.yml 수정
2-1) 변경할 위치가 src/resources
logging:
config: classpath:{파일경로}/{수정된 로그백 파일명}.xml
2-2) 서버 경로일 경우
logging:
config: file:///{파일경로}/{수정된 로그백 파일명}.xml
3. 직접 경로 전달 받기
서버마다 환경이 다르기 때문에 실행 시 입력받을 수 있게 시스템 변수에 경로를 설정한다.
logback-spring.xml 수정
...
<file>${LOG_DIR}/server.log</file>
...
<fileNamePattern>${LOG_DIR}/jex-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
[프로젝트 실행]
java -DLOG_DIR={경로} -jar {프로젝트}.jar
- LOG_DIR : 변수 이름을 설정해 내가 경로를 입력받아 내가 원하는 경로에 로그 파일을 생성한다.
4. Profile에 따른 서로 다른 로그 파일 생성
dev, prod 등 Profile에 따라 다른 로그 파일을 설정할 수 있다.
application.yml 수정
# 디폴트 로그백 경로
logging:
config: file:///Users/webcash/jex/logback-spring.xml
---
# poc 로그백 경로
spring:
profiles: poc
logging:
config: file:///Users/webcash/jex/logback-dev.xml
---
# prod 로그백 경로
spring:
profiles: prod
logging:
config: file:///Users/webcash/jex/logback-prod.xml
- 물론 application 파일 자체를 Profile마다 다르게 설정할 수 있지만, 단순히 로그 파일만 다르게 할 경우 '---' 구분선을 통해 다르게 설정할 수 있다.
반응형
'Java' 카테고리의 다른 글
[Spring Boot] @ConfigurationProperties 프로퍼티 바인딩 방법 (0) | 2024.06.25 |
---|---|
[Spring Boot/Spring Cloud] MSA - Spring Cloud Config 외부 설정 관리 (0) | 2023.12.25 |
[IntelliJ] GitLab 이클립스 프로젝트 IntelliJ에 import 방법 (0) | 2023.09.25 |
[Spring Boot/Spring Cloud] MSA - API Gateway를 사용한 로드밸런싱 방법 (0) | 2023.08.04 |
[Spring Boot/Spring Cloud] MSA - Netflix Eureka 서버/클라이언트 구축 (0) | 2023.07.23 |