- aisTargetImportJob: S&P Global AIS API 연동 (매 분 15초) - AIS Target 조회 API (MMSI/시간/공간/폴리곤/WKT 검색) - 항해 조건 필터 검색 API (SOG/COG/Heading/Destination/Status) - Caffeine 캐시 적용 (TTL 120분, 최대 30만건) - partitionManagerJob: 매일 1회 일별,월별 파티션 자동 생성 [개선] - API context-path: /snp-api로 변경 (다른 API 서비스의 Proxy 설정 충돌 방지) - BaseApiReader 상태 초기화 로직 추가 (재실행 시 0건 버그 수정) - logback-spring.xml: 로그 파일 분리 및 롤링 정책 적용
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>
|