본문 바로가기

나머지

logback programmatically

반응형

일반적으로 logback  을 이용할 때 xml이나 properties 등 설정 파일들을 이용한다.

그런데 가끔 ( 내 경우에는 그냥 궁금해서 테스트 ) 런타임에 동적으로 로그파일을 생성하고자 하는 경우에 있나보다.

예를 들어......

흠. 뭐가 있을까 사용자 별로 별도의 로그파일을 남기고 싶을때?

오늘 "첫째토끼"가 들어와서 뭘 했나를 파일 별로 남기고 싶을 때 유용할 듯 하다.


그래서 이래저래 뒤져 봤는데 일단 공식 사이트에도 명확한 가이드?는 없는거 같다. ( 여러가지 있긴 한데 뭔가 맘에 드는게 없음)


그래서 이래저래 삽질 한 결과 몇 가지 숙지해야 만 하는 사항이 있다.

1. 일단은 xml 구조를 가지고 이에 충실히 따르면 된다.

예를 들어 아래와 같은 구조가 있을 경우 자바로 코딩을 하게 되면 ( 수도 코드임)

<appender>

<rollingPolicy> </rollingPolicy>

</appender>


Appender appender = new Appender();

RollingPolicy policy = new RollingPolicy();


appender.setPolicy(policy);


위처럼 하면 될거 같다. 하지만 이렇게 할 경우 null exception 이 난다.

그 이유를 보니 xml  구조상 appender 의 child, rollingpolicy 의 parent 구조로 되어 있기 때문에 이 구조에 충실히 따라야 한다. ( 이유에 대한 설명이나 구조 / lifecycle 에 대한 설명을 좀 찾아 보고 싶다..)


그래서 policy.setParent(appender); 설정이 들어가야 한다.

2. context 를 설정해야 한다.

주로 Encoder, Appender, Policy 를 많이 쓰게 사용하는데 각 컴포넌트 마다 context 에 연결을 해 놔야 로깅이 된다.

(LoggerContext)LoggerFactory.getILoggerFactory() 로 context를 가져와서 encoder.setContext(context) 처럼 설정을 다 해줘야 한다.

3. start  시켜줘야 한다.

이 부분에 대해서는 명확하게 참고할만한걸 못찾았고 공식 문서에 보며 이런 내용이 있다. (Appender 관련 페이지 http://logback.qos.ch/manual/appenders.html )

started field 가 true 여야지 append 를 하며 appender 가 한 번 닫히면 로그를 쓸 수가 없다. Appender objects 는 LifeCycle interface 를 구현 했으며 start, stop, isStarted 메소드를 가지고 있다. appender, Joran, logback 의 properties 를 설정하고 난 후에 활성화 하기 위해 start 를 호출해야 한다. 

위 내용을 보면 appender 만 start를 호출해 주면 될거 같은 encoder, policy 등도 start 를 해 줘야 로깅이 되고 나머지는 무시 된다. 사용할려고 하는 컴포넌트에 start 메소드가 있는지 확인해 보자.


반응형