slf4j / WAS 로그가 두번뜨는 문제 다시 질문드립니다.
- 작성자 :
- 김*호
- 작성일 :
- 2014-07-15 09:31:30
- 조회수 :
- 1,123
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
WAS 구동시 로그가 두번 도는것에 대해 어제 질문드렸는데.
질문내용이 부족하여 파일로 첨부했습니다.
waslog.txt 에 보시면 중간쯔음에 톰캣이 돌고 스버스타트업 되어 있는부분까진데,
그 밑으로 똑같은 로그가 한번더 돌고있네요..
혹시나 해서 pom.xml 도 같이 첨부했습니다.
보안상 사용되는 라이브러리만 제외하고 올렸습니다.
검토해보시고 답변좀 부탁드리겠습니다 ㅜ.ㅜ
질문내용이 부족하여 파일로 첨부했습니다.
waslog.txt 에 보시면 중간쯔음에 톰캣이 돌고 스버스타트업 되어 있는부분까진데,
그 밑으로 똑같은 로그가 한번더 돌고있네요..
혹시나 해서 pom.xml 도 같이 첨부했습니다.
보안상 사용되는 라이브러리만 제외하고 올렸습니다.
검토해보시고 답변좀 부탁드리겠습니다 ㅜ.ㅜ
A
안녕하세요. 김연호님.
로거에 의해 두번 이상씩 출력되는 것은 logger 설정 상에 additivity="false" 속성이 등록되지 않아서 logger가 계층적으로 root까지 올라가면서 로그를 남기기 때문입니다.
이 경우는 동일한 로그가 연속하여 찍히도록 되어 있고, 김연호님의 로그 설정 상으로 보면 해당 부분의 문제는 아닙니다.
그리고 로그를 보시면 실제로 로그 자체가 중복되는 것이 아니라 Spring container가 중복하여 기동하는 것인데 이것은 정상입니다.
하나는 "Root WebApplicationContext: initialization started"로부터 시작하는 부분이고,
다른 하나는 "FrameworkServlet 'dispatcher': initialization started"로 시작하는 부분입니다.
다만, 2개의 Spring container 상에 동일하게 controller를 스캔하다 보니 중복되어 처리된 것으로 다음과 같이 확인해 보시면 되실 것 같습니다.
web.xml 상에 보시면 ContextLoaderListener(<listener> 설정)에 지정되는 contextConfigLocation과 ContextLoaderListener(<servlet> 설정)에 지정되는 contextConfigLocation 설정이 있으신데,
각각에 지정된 xml 파일 중에 <context:component-scan ../> 설정 상에 각각 다음과 같이 include-filter와 exclude-filter가 적용되어 있으셔야 합니다.
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
그럼, 즐거운 하루되십시오.
감사합니다.
로거에 의해 두번 이상씩 출력되는 것은 logger 설정 상에 additivity="false" 속성이 등록되지 않아서 logger가 계층적으로 root까지 올라가면서 로그를 남기기 때문입니다.
이 경우는 동일한 로그가 연속하여 찍히도록 되어 있고, 김연호님의 로그 설정 상으로 보면 해당 부분의 문제는 아닙니다.
그리고 로그를 보시면 실제로 로그 자체가 중복되는 것이 아니라 Spring container가 중복하여 기동하는 것인데 이것은 정상입니다.
하나는 "Root WebApplicationContext: initialization started"로부터 시작하는 부분이고,
다른 하나는 "FrameworkServlet 'dispatcher': initialization started"로 시작하는 부분입니다.
다만, 2개의 Spring container 상에 동일하게 controller를 스캔하다 보니 중복되어 처리된 것으로 다음과 같이 확인해 보시면 되실 것 같습니다.
web.xml 상에 보시면 ContextLoaderListener(<listener> 설정)에 지정되는 contextConfigLocation과 ContextLoaderListener(<servlet> 설정)에 지정되는 contextConfigLocation 설정이 있으신데,
각각에 지정된 xml 파일 중에 <context:component-scan ../> 설정 상에 각각 다음과 같이 include-filter와 exclude-filter가 적용되어 있으셔야 합니다.
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
그럼, 즐거운 하루되십시오.
감사합니다.