
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>
읽어주셔서 감사합니다.
레퍼런스
반응형




최근댓글