# 관련 소스는 여기에서 확인하실 수 있습니다.
뭔가 대단한 것을 찾은 것 같지만,
사실 아주아주 기초적인 것에서 실마리를 찾았다. 바로 자바의 상속 개념!
그렇다면 무엇을 상속받아야 하는가!? 이제부터 찬찬히 살펴보도록 하겠다.
Logback에서는 RollingFileAppender
라는 로그를 파일로 남기기 위해 사용하는 클래스가 존재한다. 이 클래스 안에 여러 가지 설정들을 통하여 파일 경로, 파일 이름, 보관 주기, 롤링 조건
들을 컨트롤할 수 있도록 하는데, 얘기하고자 하는 주제가 아니니 자세한 설명은 넘어가도록 하겠다. (검색해 보면 상세히 설명된 곳들이 많다)
아무튼, RollingFileAppender
에는 파일 롤링을 관리하는 몇 가지 rollingPolicy
를 설정할 수 있는데 내가 받은 조건은 시간 관련 요구 조건이라 TimeBasedRollingPolicy
로 설정하였다.
rollingPolicy
에는 rollover
의 시기를 지정할 수 있는 TriggeringPolicy
을 설정할 수 있다. 다만, 기본적으로는 Logback 내부에 정해져있는 규칙에 따른 rollover
시기를 지정할 수 있는 것뿐이라, 내가 구현하고자 하는 조건에는 맞추지 못했던 것이다.
결론적으로 말하자면, DefaultTimeBasedFileNamingAndTriggeringPolicy
라는 TimeBasedFileNamingAndTriggeringPolicyBase
추상 클래스의 구현체를 상속받았다.
처음에는 RollingFileAppender
자체를 상속받아서 rollover
를 직접 컨트롤하려고 했으나, 외부 라이브러리의 내부 클래스 정보에 대해 접근하는 부분에 있어서 제약이 많아서 실패하고 말았다.
내가 DefaultTimeBasedFileNamingAndTriggeringPolicy
클래스에서 재정의한 메서드는 아래와 같다.
DefaultTimeBasedFileNamingAndTriggeringPolicy
클래스의 isTriggeringEvent
메서드TimeBasedFileNamingAndTriggeringPolicyBase
클래스의 computeNextCheck
메서드먼저 DefaultTimeBasedFileNamingAndTriggeringPolicy
클래스의isTriggeringEvent
메서드는 로그 이벤트가 발생했을 경우에 rollover
를 해도 되는지 아닌지를 판별하면서 다음 rollover
시기를 계산하고 저장하는 기능을 수행한다. 이 메서드를 오버라이딩해서 로그 파일의 이름을 요구사항에 맞추도록 수정하였다.
그리고 TimeBasedFileNamingAndTriggeringPolicyBase
클래스의 computeNextCheck
메서드는 다음 rollover
시기를 계산하여 저장하는 기능을 수행한다.
원래 computeNextCheck
의 코드는 RollingCalendar
클래스의 getNextTriggeringDate
메서드를 호출하고 그 안에서 getEndOfNextNthPeriod
호출하는데, 호출 시 롤링 주기가 1
로 고정되어 있어 logback 기본 설정으로는 원하는 주기를 맞출 수 없었던 것이다.
그래서 나는 getNextTriggeringDate
메서드를 거치지 않고 바로 getEndOfNextNthPeriod
메서드를 호출하면서 원하는 롤링 주기를 인자로 넣어주도록 변경하였다.
이제까지 요구사항과 문제점을 파악하고 해결책을 찾는 과정, 그리고 해결에 대한 방법을 서술하였다. 다음 편에서는 작성한 코드를 보면서 설명하는 시간을 갖도록 하겠다. (생각보다 간단해서 실망할지도...?!)