반응형
Logging Pattern 에서 YYYY로 연도 설정시 문제가 있던 것을 발견하고 yyyy로 수정한 내용에 대한 글입니다.
1. 문제 확인
- 우리 서비스의 prerpod/stage/prod 로그는 Sumologic과 연동되어있는데, Sumologic에서 로그 찍힌것을 2024-12-30에 로그를 확인해보니, 2025-12-30로 찍혀있음을 확인하였습니다.
1.1. log4j2-local.xml(log4j2-cloud.xml) 최초 설정 확인
- PatternLayout - pattern의 날짜 부분을 살펴보면, %d{YYYY-MM-dd HH:mm:ss.SSS XX} 로 설정되어있었습니다.
- 보안상 log4j2-local.xml로 공유
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS XX}{GMT+9} %-5level - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
1.2. 재현
- 테스트코드를 통해 로그를 2024-12-30에 확인해보았더니 아래와 같았습니다.
???... 2025-12-30 ...?
2. 문제 원인 파악
날짜 패턴 중 연도에 대한 패턴을 확인해보니 아래와 같았습니다.
패턴 | 의미 | 기준 | 예시: 2024-12-30 |
YYYY | 주 기반 연도 (Week-Based Year) | ISO 8601 주(Week) 기준 | 2025 |
yyyy | 달력 연도 (Calendar Year) | 1월 1일 ~ 12월 31일 | 2024 |
2.1. YYYY (Week-Based Year)
- 주 기반 연도를 나타냅니다.
- 연도의 시작이 첫 번째 주(week 1) 기준으로 결정됩니다.
- ISO-8601 표준에 따라 한 해의 첫 주는 1월 1일을 포함하고 있는 첫 번째 목요일을 기준으로 정의됩니다.
- 결과적으로, YYYY는 실제 달력 연도(yyyy)와 달라질 수 있습니다.
- 주 단위 보고서, 주간 통계 등을 다룰 때 사용할 수 있습니다.
- 예: 12월의 마지막 며칠이나 1월의 첫 며칠이 주(week) 기준으로 다른 연도로 속할 수 있습니다.
2.2. yyyy (Calendar Year)
- 달력 기준 연도를 나타냅니다.
- 1월 1일부터 12월 31일까지의 그레고리력(Calendar Year) 기준으로 연도를 표시합니다.
- 일반적으로 우리가 연도를 표현할 때 사용하는 방식입니다.
- 일반적인 날짜와 시간을 기록하거나 표시할 때 사용할 수 있습니다.
3. 해소
1.1. log4j2-local.xml(log4j2-cloud.xml) 설정 수정
- PatternLayout - pattern의 날짜 부분을, %d{yyyy-MM-dd HH:mm:ss.SSS XX} 로 수정하였습니다.
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS XX}{GMT+9} %-5level - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
1.2. 재현
- 테스트코드를 통해 로그를 2024-12-30에 확인해보았더니 아래와 같이 정상적으로 수정됬음을 확인할 수 있었습니다.
반응형
'Development Logs > Spring Ecosystem' 카테고리의 다른 글
[Spring Boot + GW] Log4j2 활용하여 Logging 설정하기(feat. Logback vs Log4j2 선택) (0) | 2024.12.30 |
---|---|
Java Security Property 수정 (0) | 2024.12.01 |
[Spring GW] Netty Http Client에 Java System Property 적용 및 JVM Option 사용이 안되는 이유 (0) | 2024.12.01 |
[Spring GW] Netty HttpClient TLS버전 추가 설정 기능 테스트 (TLSv1만 연결가능한 서버 구현하기) (0) | 2024.11.17 |
[Spring GW] Netty HttpClient SSL/TLS Custom 설정하기 (1) | 2024.11.17 |