
AWS EC2에서 서비스를 실행할 때 아래와 같이 Logback 오류가 발생하였습니다.
스택트레이스를 분석해 보면 로그파일 상대경로가 적용되지 않는 것을 볼 수 있습니다.
java[341106]: Caused by: java.lang.IllegalStateException: Logback configuration error detected:
java[341106]: ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - Failed to create parent directories for [/logs/logFile.log]
java[341106]: ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(logs/logFile.log,true) call failed. java.io.FileNotFoundException: logs/logFile.log (No such file or directory)
해결책은 다음과 같습니다.
1. Profile 별 로그파일 경로를 설정할 수 있도록 application.yml 구성
log.config.path 설정을 추가하여 logback-spring.xml에서 RollingFileAppender 파일경로를 설정합니다.
1-1. application-local.yml
spring: application.name: testProject config: activate: on-profile: local logging: config: classpath:logback-spring.xml log: config: path: logs
1-2. application-dev.yml
spring: application.name: testProject config: activate: on-profile: dev logging: config: classpath:logback-spring.xml log: config: path: /home/ubuntu/myProject/logs
2. logback 설정 구성
RollingFileAppender는 FileAppender를 상속하여 로그 파일을 rollover 합니다.
logback-spring.xml 파일을 구성하여 RollingFileAppender 파일경로를 설정합니다.
설정해야 할 property는 다음과 같습니다.
Property | Type | Description |
file | String | 타깃 파일의 이름 |
append | boolean (default: true) | append 정책. true: 이어 쓰기, false: 덮어 쓰기 |
encoder | Encoder | 로그 이벤트가 OutputStreamAppender에 기록되는 방식 |
rollingPolicy | RollingPolicy | rollover 발생 시 RollingFileAppender의 행동 |
triggeringPolicy | TriggeringPolicy | rollover 활성화 시점 |
predent | boolean | FileAppender와 동일. FixedWindowRollingPolicy는 prudent mode를 지원하지 않는다. TimeBasedRollingPolicy일 경우 두가지 제한조건에 대해 prudent mode 제공 1. 파일 압축 불가능 2. file 프로퍼티는 설정되지 않아야 한다 |
2-1. logback-spring.xml
logback-spring.xml 파일을 단순화 하기 위하여 logback-custom.xml 파일 include
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="logback-custom.xml"/> <springProfile name="(local||dev)"> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> <!-- rolling file에는 debug, console에는 trace 분리하여 처리 가능하다. --> <logger name="org.hibernate.type" level="TRACE"/> <logger name="com.test.myProject" level="DEBUG"/> <logger name="org.hibernate.SQL" level="DEBUG"/> <!-- HikariConfig --> <logger name="com.zaxxer.hikari.HikariConfig" level="DEBUG" /> </springProfile> </configuration>
2-2. logback-custom.xml
SpringProperty 설정을 통해 Profile 별 파일경로를 지정하는 구문 추가
<?xml version="1.0" encoding="UTF-8"?> <included> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>${CONSOLE_LOG_CHARSET}</charset> </encoder> </appender> <springProperty name="LOG_PATH" source="log.config.path" defaultValue="logs/"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/logFile.log</file> <append>true</append> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder> <pattern> %d{HH:mm:ss.SSS} [%thread] %-3level %logger{20}[%line] -%msg%n </pattern> </encoder> </appender> </included>
읽어주셔서 감사합니다.
레퍼런스
반응형
최근댓글