Development Logs/Spring Ecosystem

[Spring Boot] Logging Pattern - 연도 설정시 주의할 점 (YYYY vs yyyy)

유뱅유뱅뱅 2024. 12. 30. 12:41
반응형

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에 확인해보았더니 아래와 같이 정상적으로 수정됬음을 확인할 수 있었습니다.



반응형