조건
- profile에 따른 로깅 설정
- 로깅 레벨에 따른 로깅 설정(prod profile에서만)
Profile
- prod(aws ec2)
- file 기반
- ERROR level
- filename : error.log
- 나머지 level
- filename : yyyy-MM-dd_%i.rg.log (일자 별 rollingpolicy 적용)
- local, dev, test
- console 기반
설정 코드
logback-spring.xml
... <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/> //console 기반 로깅 <springProfile name="default"> <appender name="CONSOLE_LOG" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> </springProfile> //file 기반 로깅 <springProfile name="prod"> <appender name="FILE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> </filter> <!-- <file>${LOG_PATH}/rg.log</file> --> <file>log/rg.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- <fileNamePattern>${LOG_PATH}/%d{yyyy-mm-dd}_%i.rg.log</fileNamePattern>--> <fileNamePattern>log/%d{yyyy-MM-dd}_%i.rg.log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>15</maxHistory> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> </springProfile> //file 기반 로깅 - error log <springProfile name="prod"> <appender name="ERROR_FILE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- <file>${LOG_PATH}/error.log</file>--> <file>log/error.log</file> <param name="MaxBackupIndex" value="2"/> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> </springProfile> //default profile <springProfile name="default, test"> <root level="info"> <appender-ref ref="CONSOLE_LOG"/> </root> </springProfile> //prod profile <springProfile name="prod"> <root level="info"> <appender-ref ref="FILE_LOG"/> <appender-ref ref="ERROR_FILE_LOG"/> </root> </springProfile>
level logging 방식
- levelfilter
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>
error level 로그에 대해서만 출력
- ThresholdFilter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>error</level> </filter>
error level, error level보다 높은 레벨의 로그에 대하여만 출력
→ 둘다 동작 x
테스트 결과 문제점
(file 로깅 테스트)
rg.log

레벨에 따른 로그 파일 분류가 이루어지지 않음..
error.log 생성 안 됨
++
rollingpolicy 설정 추가..