others

Log4j의 additivity 옵션

aircook 2008. 1. 7. 19:04

logger는 기본적으로 정의한 패키지의 조상으로부터 모든 appender을 상속받습니다.

만약 다음과 같이 rootorg.springframework 두개의 logger가 같은 appender를 사용한다면 같은 메시지가 두번 찍히는 것을 확인할 수 있습니다.

<logger name="org.springframework">

<level value="DEBUG"/>

<appender-ref ref="CONSOLE"/>

</logger>

<root>

<level value="DEBUG"/>

<appender-ref ref="CONSOLE"/>

</root>

 

결과

2008. 1. 7. 오후 6:58:41 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:250)

INFO : FrameworkServlet 'spring': initialization completed in 484 ms

2008. 1. 7. 오후 6:58:41 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:250)

INFO : FrameworkServlet 'spring': initialization completed in 484 ms

2008. 1. 7. 오후 6:58:41 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:129)

DEBUG : Servlet 'spring' configured successfully

2008. 1. 7. 오후 6:58:41 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:129)

DEBUG : Servlet 'spring' configured successfully

 

이런경우에 additivity="false"라고 선언해주면 로깅메세지가 중복되어 찍히는 것을 막을 수 있습니다.

<logger name="org.springframework" additivity="false">

<level value="DEBUG"/>

<appender-ref ref="CONSOLE"/>

</logger>

 

결과

2008. 1. 7. 오후 7:00:52 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:250)

INFO : FrameworkServlet 'spring': initialization completed in 547 ms

2008. 1. 7. 오후 7:00:52 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:129)

DEBUG : Servlet 'spring' configured successfully

 

한마디로 additivity 속성은 상위 appender를 상속받는 것을 제어할수 있게 해주는 옵션입니다.