-
Spring - logback 패키지별 분리하여 설정하기Spring 2025. 1. 8. 14:55반응형
파일 분리 및 패키지별 로그 관리
(1) 패키지별 로그 파일 관리
예를 들어, a 패키지와 b 패키지에서 발생하는 로그를 각각 a.log와 b.log에 기록하고, MyBatis 쿼리 로그를 별도로 관리하려면 다음과 같이 설정합니다.
<configuration debug="true"> <!-- 로그 파일 경로 변수 설정 --> <property name="LOG_PATH" value="D:/workspace/example/logs" /> <!-- 콘솔 출력 --> <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> <!-- a 패키지 로그 --> <appender name="A_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/a.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- b 패키지 로그 --> <appender name="B_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/b.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/b-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- MyBatis 쿼리 로그 --> <appender name="MYBATIS_QUERY" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/mybatis.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/mybatis-sql-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- a 패키지에 대한 로거 --> <logger name="a" level="INFO" additivity="false"> <appender-ref ref="A_FILE" /> </logger> <!-- b 패키지에 대한 로거 --> <logger name="b" level="INFO" additivity="false"> <appender-ref ref="B_FILE" /> </logger> <!-- MyBatis 쿼리 로거 --> <logger name="a.service.mapper" level="DEBUG" additivity="false"> <appender-ref ref="MYBATIS_QUERY" /> </logger> <logger name="b.service.mapper" level="DEBUG" additivity="false"> <appender-ref ref="MYBATIS_QUERY" /> </logger> <!-- 기본 로그 설정 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
1. RollingFileAppender
RollingFileAppender는 Logback의 핵심 Appender 중 하나로, 로그 파일을 일정 조건(시간, 크기 등)에 따라 순환(rolling)하면서 관리하는 역할을 합니다. 이 방식은 오래된 로그를 보존하면서도 최신 로그를 저장하기 위해 사용됩니다.
주요 속성
- file: 로그를 저장할 기본 파일 경로.
- rollingPolicy: 로그 파일의 순환 조건(시간 기준, 크기 기준 등)을 설정.
- encoder: 로그 메시지를 포맷팅(형식화)하는 설정.
예제
<appender name="A_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/a.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
2. rollingPolicy
rollingPolicy는 RollingFileAppender의 하위 설정으로, 로그 파일의 순환 조건을 정의합니다. Logback에서 자주 사용되는 rollingPolicy는 두 가지입니다:
(1) TimeBasedRollingPolicy
- 시간 기준으로 파일을 교체(roll)합니다.
- 로그 파일 이름에 날짜를 포함하여 파일이 순환되도록 설정합니다.
주요 속성
- fileNamePattern: 순환되는 로그 파일의 이름 형식을 정의.
- maxHistory: 보관할 로그 파일의 최대 개수.
예제
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy>
- fileNamePattern: 로그 파일 이름에 날짜(예: a-2025-01-08.log)를 포함.
- maxHistory: 30일 동안의 로그 파일만 유지. 이후 오래된 파일은 삭제.
(2) SizeBasedTriggeringPolicy
- 크기 기준으로 파일을 교체(roll)합니다.
- 파일 크기가 설정된 maxFileSize를 초과하면 새로운 로그 파일을 생성합니다.
예제
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy>
3. fileNamePattern
fileNamePattern은 rollingPolicy에서 순환 로그 파일의 이름 형식을 정의합니다. 일반적으로 시간 또는 크기 기준으로 파일 이름을 구성합니다.
예제
<fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern>
주요 패턴
- ${LOG_PATH}: 로그 파일이 저장될 디렉토리(변수).
- a-%d{yyyy-MM-dd}: 날짜 기반의 파일 이름.
- %d{yyyy-MM-dd}는 로그 파일 이름에 날짜를 추가(예: a-2025-01-08.log).
4. maxHistory
- maxHistory는 보관할 로그 파일의 최대 개수를 설정합니다.
- TimeBasedRollingPolicy에서 사용됩니다.
- 예를 들어, maxHistory가 30으로 설정된 경우, 가장 오래된 30일 동안의 로그 파일만 보관됩니다.
예제
<maxHistory>30</maxHistory>
5. encoder
encoder는 로그 메시지를 **포맷팅(형식화)**합니다. 로그가 기록되는 형식을 정의하며, 패턴 문자열을 통해 다양한 정보를 포함할 수 있습니다.
예제
<encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder>
패턴 설명
- %d{yyyy-MM-dd HH:mm:ss}
- 로그 발생 시간.
- 형식은 SimpleDateFormat과 동일합니다(예: 2025-01-08 14:23:45).
- [%thread]
- 로그를 발생시킨 스레드 이름(예: [main]).
- %-5level
- 로그의 레벨(INFO, DEBUG, ERROR 등).
- %-5는 레벨 이름을 왼쪽 정렬로 출력하고, 5자리를 확보합니다(예: INFO , ERROR).
- %logger{36}
- 로그를 출력한 로거 이름.
- {36}은 최대 길이를 제한(36자). 긴 로거 이름은 잘립니다.
- %msg
- 로그 메시지 내용.
- %n
- 줄바꿈 문자. 로그 메시지 끝에 줄바꿈을 추가합니다.
주요 정리
- RollingFileAppender: 로그 파일을 순환 관리.
- TimeBasedRollingPolicy: 시간에 따라 파일 순환.
- fileNamePattern: 파일 이름 형식(예: 날짜 포함).
- maxHistory: 보관할 로그 파일 개수 제한.
- encoder: 로그 메시지의 포맷 정의.
- pattern 변수: %d, %thread, %level, %msg 등을 활용.
이 설정은 프로젝트에 필요한 유연한 로그 관리 및 유지 보수를 가능하게 합니다.
반응형'Spring' 카테고리의 다른 글
인텔리제이 Program Arguments 설정방법 (0) 2025.03.16 [Spring] - formBackingObject()와 @ModelAttribute (1) 2025.01.20 Spring - LogBack설정 (0) 2025.01.08 Spring - 스프링 서버 실행 흐름 및 설정 파일/어노테이션 실행 시점 (0) 2024.12.23 Spring MVC - <mvc:interceptors> 사용법 및 설명 (0) 2024.12.12