일반적으로 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 메소드가 있는지 확인해 보자.
'나머지' 카테고리의 다른 글
두눈 크게 뜨고 열심히 클릭하면 에어비앤비에서 만날 수 있다는 멋진 집들...^^ (0) | 2016.06.14 |
---|---|
칠성급 호텔이 규슈의 철로 위를 달린다... 일본의 초호화 럭셔리 기차, 칠성... (0) | 2016.06.14 |
사진 보기 (0) | 2016.05.20 |
CentOS mount (0) | 2016.05.19 |
궁금해지 마블 쿠키 영상들 ( 아이언맨, 헐크, 어벤져스 등 ) (0) | 2016.05.05 |