235 lines
9.6 KiB
XML
235 lines
9.6 KiB
XML
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
||
|
|
<configuration scan="true" scanPeriod="30 seconds">
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
프로퍼티 정의
|
||
|
|
======================================== -->
|
||
|
|
<property name="LOG_PATH" value="logs"/>
|
||
|
|
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n"/>
|
||
|
|
<property name="LOG_PATTERN_SIMPLE" value="%d{HH:mm:ss.SSS} %-5level %logger{20} - %msg%n"/>
|
||
|
|
|
||
|
|
<!-- 파일 크기 및 보관 설정 -->
|
||
|
|
<property name="MAX_FILE_SIZE" value="100MB"/>
|
||
|
|
<property name="MAX_HISTORY" value="30"/>
|
||
|
|
<property name="TOTAL_SIZE_CAP" value="10GB"/>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
콘솔 Appender (개발용)
|
||
|
|
======================================== -->
|
||
|
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||
|
|
<encoder>
|
||
|
|
<pattern>${LOG_PATTERN_SIMPLE}</pattern>
|
||
|
|
<charset>UTF-8</charset>
|
||
|
|
</encoder>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
메인 로그 (application.log)
|
||
|
|
- 일반 애플리케이션 로그
|
||
|
|
- INFO 레벨 이상
|
||
|
|
======================================== -->
|
||
|
|
<appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||
|
|
<file>${LOG_PATH}/application.log</file>
|
||
|
|
<encoder>
|
||
|
|
<pattern>${LOG_PATTERN}</pattern>
|
||
|
|
<charset>UTF-8</charset>
|
||
|
|
</encoder>
|
||
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||
|
|
<fileNamePattern>${LOG_PATH}/archive/application.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||
|
|
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
||
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
||
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
||
|
|
</rollingPolicy>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
배치 로그 (batch.log)
|
||
|
|
- Spring Batch Job/Step 실행 이력
|
||
|
|
- Job 시작/종료, 처리 건수 등
|
||
|
|
======================================== -->
|
||
|
|
<appender name="BATCH_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||
|
|
<file>${LOG_PATH}/batch.log</file>
|
||
|
|
<encoder>
|
||
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{jobName}] %logger{30} - %msg%n</pattern>
|
||
|
|
<charset>UTF-8</charset>
|
||
|
|
</encoder>
|
||
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||
|
|
<fileNamePattern>${LOG_PATH}/archive/batch.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||
|
|
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
||
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
||
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
||
|
|
</rollingPolicy>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
API 요청 로그 (api-access.log)
|
||
|
|
- REST API 요청/응답 이력
|
||
|
|
- 요청 IP, 파라미터, 응답시간 등
|
||
|
|
======================================== -->
|
||
|
|
<appender name="API_ACCESS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||
|
|
<file>${LOG_PATH}/api-access.log</file>
|
||
|
|
<encoder>
|
||
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %msg%n</pattern>
|
||
|
|
<charset>UTF-8</charset>
|
||
|
|
</encoder>
|
||
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||
|
|
<fileNamePattern>${LOG_PATH}/archive/api-access.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||
|
|
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
||
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
||
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
||
|
|
</rollingPolicy>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
메트릭 로그 (metrics.log)
|
||
|
|
- 성능 지표, 통계 정보
|
||
|
|
- 주기적 상태 체크 로그
|
||
|
|
======================================== -->
|
||
|
|
<appender name="METRICS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||
|
|
<file>${LOG_PATH}/metrics.log</file>
|
||
|
|
<encoder>
|
||
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg%n</pattern>
|
||
|
|
<charset>UTF-8</charset>
|
||
|
|
</encoder>
|
||
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||
|
|
<fileNamePattern>${LOG_PATH}/archive/metrics.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||
|
|
<maxFileSize>50MB</maxFileSize>
|
||
|
|
<maxHistory>7</maxHistory>
|
||
|
|
<totalSizeCap>1GB</totalSizeCap>
|
||
|
|
</rollingPolicy>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
에러 로그 (error.log)
|
||
|
|
- ERROR, WARN 레벨만 기록
|
||
|
|
- 문제 추적용
|
||
|
|
======================================== -->
|
||
|
|
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||
|
|
<file>${LOG_PATH}/error.log</file>
|
||
|
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||
|
|
<level>WARN</level>
|
||
|
|
</filter>
|
||
|
|
<encoder>
|
||
|
|
<pattern>${LOG_PATTERN}</pattern>
|
||
|
|
<charset>UTF-8</charset>
|
||
|
|
</encoder>
|
||
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||
|
|
<fileNamePattern>${LOG_PATH}/archive/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||
|
|
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
||
|
|
<maxHistory>60</maxHistory>
|
||
|
|
<totalSizeCap>5GB</totalSizeCap>
|
||
|
|
</rollingPolicy>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
비동기 Appender (성능 최적화)
|
||
|
|
======================================== -->
|
||
|
|
<appender name="ASYNC_APP" class="ch.qos.logback.classic.AsyncAppender">
|
||
|
|
<queueSize>512</queueSize>
|
||
|
|
<discardingThreshold>0</discardingThreshold>
|
||
|
|
<appender-ref ref="APP_FILE"/>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<appender name="ASYNC_BATCH" class="ch.qos.logback.classic.AsyncAppender">
|
||
|
|
<queueSize>256</queueSize>
|
||
|
|
<discardingThreshold>0</discardingThreshold>
|
||
|
|
<appender-ref ref="BATCH_FILE"/>
|
||
|
|
</appender>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
Logger 설정 - 패키지별 레벨
|
||
|
|
======================================== -->
|
||
|
|
|
||
|
|
<!-- 애플리케이션 로거 -->
|
||
|
|
<logger name="com.snp.batch" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_APP"/>
|
||
|
|
<appender-ref ref="ERROR_FILE"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- 배치 Job/Config 로거 -->
|
||
|
|
<logger name="com.snp.batch.jobs" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="ERROR_FILE"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- 배치 Reader/Processor/Writer - 개별 row 로그 최소화 -->
|
||
|
|
<logger name="com.snp.batch.common.batch.reader" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
<logger name="com.snp.batch.jobs.aistarget.batch.reader" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
<logger name="com.snp.batch.jobs.aistarget.batch.processor" level="WARN" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
<logger name="com.snp.batch.jobs.aistarget.batch.writer" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- API 요청 로거 -->
|
||
|
|
<logger name="com.snp.batch.api.logging" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="API_ACCESS_FILE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- 메트릭 로거 -->
|
||
|
|
<logger name="com.snp.batch.metrics" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="METRICS_FILE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- 파티션 관리 로거 -->
|
||
|
|
<logger name="com.snp.batch.global.partition" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- Spring Batch 프레임워크 - 핵심 로그만 -->
|
||
|
|
<logger name="org.springframework.batch" level="WARN" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
<logger name="org.springframework.batch.core.job" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
<logger name="org.springframework.batch.core.step" level="INFO" additivity="false">
|
||
|
|
<appender-ref ref="ASYNC_BATCH"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</logger>
|
||
|
|
|
||
|
|
<!-- Spring 프레임워크 -->
|
||
|
|
<logger name="org.springframework" level="WARN"/>
|
||
|
|
<logger name="org.springframework.web" level="WARN"/>
|
||
|
|
|
||
|
|
<!-- Hibernate/JPA - SQL 로그 최소화 -->
|
||
|
|
<logger name="org.hibernate" level="WARN"/>
|
||
|
|
<logger name="org.hibernate.SQL" level="WARN"/>
|
||
|
|
<logger name="org.hibernate.type.descriptor.sql" level="WARN"/>
|
||
|
|
|
||
|
|
<!-- JDBC -->
|
||
|
|
<logger name="org.springframework.jdbc" level="WARN"/>
|
||
|
|
<logger name="com.zaxxer.hikari" level="WARN"/>
|
||
|
|
|
||
|
|
<!-- Quartz 스케줄러 -->
|
||
|
|
<logger name="org.quartz" level="WARN"/>
|
||
|
|
|
||
|
|
<!-- WebClient/Reactor -->
|
||
|
|
<logger name="reactor.netty" level="WARN"/>
|
||
|
|
<logger name="io.netty" level="WARN"/>
|
||
|
|
|
||
|
|
<!-- ========================================
|
||
|
|
Root Logger
|
||
|
|
======================================== -->
|
||
|
|
<root level="INFO">
|
||
|
|
<appender-ref ref="ASYNC_APP"/>
|
||
|
|
<appender-ref ref="ERROR_FILE"/>
|
||
|
|
<appender-ref ref="CONSOLE"/>
|
||
|
|
</root>
|
||
|
|
|
||
|
|
</configuration>
|