Search
🙉

logback-spring.xml 설정

Intro::

로그백 설정을 통해 applicatoin.yml 보다 디테일한 설정을 할 수 있습니다.
<configuration> <!-- 콘솔 출력 Appender --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> <!-- 콘솔 출력 포맷을 정의할 수 있습니다. --> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <!-- INFO·WARN 전용 파일 Appender --> <!-- rollingPolicy를 통해서 조건에 따른 로그 파일로 기록할 수 있습니다. --> <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>log/application.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>log/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>2GB</maxFileSize> <maxHistory>5</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <!-- LevelFilter를 통해서 원하는 단계의 로그만 남길 수 있습니다. --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>NEUTRAL</onMismatch> </filter> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} [%X{clientIp}] - %msg%n </pattern> </encoder> </appender> <!-- ERROR 이상 전용 파일 Appender --> <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>log/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>log/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>2GB</maxFileSize> <maxHistory>5</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} [%X{clientIp}] - %msg%n%xException%n </pattern> </encoder> </appender> <!-- 비동기 Appender 래핑 --> <!-- 비동기로 로깅용 스레드를 사용하고 메모리에 로그를 임시 보관하기 때문에 비정상 종료를 대비해야합니다. --> <appender name="ASYNC_INFO" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>5000</queueSize> <discardingThreshold>0</discardingThreshold> <neverBlock>false</neverBlock> <includeCallerData>false</includeCallerData> <appender-ref ref="FILE_INFO"/> </appender> <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>5000</queueSize> <discardingThreshold>0</discardingThreshold> <neverBlock>false</neverBlock> <includeCallerData>true</includeCallerData> <appender-ref ref="FILE_ERROR"/> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="ASYNC_INFO"/> <appender-ref ref="ASYNC_ERROR"/> </root> </configuration>
XML
복사

비동기 로깅에 대한 shutDownHook

@Component class LogbackShutdownHook { /** * Logback Shutdown Hook * Logback의 Shutdown Hook을 등록하여 애플리케이션 종료 시 Logback의 AsyncAppender 내부 큐를 flush하고 종료합니다. */ @PreDestroy fun onDestroy() { val context = LoggerFactory.getILoggerFactory() as LoggerContext context.stop() } }
Java
복사

References::