2010-05-28 5 views
4

이 시나리오 고려 :의 log4j - 프로젝트 모듈에 따라 여러 로그 파일에 로깅

com.mysite.moduleone 
com.mysite.moduletwo 
com.mysite.commonmodule 
: 나는 두 개의 모듈 (패키지 구조) 아래와 같이 하나 개의 공통 모듈 프로젝트가

위의 경우 commonmodule 클래스는 다른 두 모듈에서 사용할 수 있습니다.

질문 :

내가 moduleonemoduletwo에서 로그 메시지는 다른 로그 파일로 이동하는 방식을 configureLog4J해야합니다. 항상 category을 사용하여이 작업을 수행 할 수 있습니다.

그러나 실제 문제는 commonmodule의 메시지도 로깅하려고 할 때입니다. 따라서 commonmodule 클래스가 moduleone에서 호출 될 때 commonmodule 로그 메시지는 moduleone 로그 파일로 이동해야합니다. commonmodulemoduletwo에서 액세스하는 경우 commonmodule 로그 메시지는 moduletwo 로그 파일로 이동해야합니다.

이러한 방식으로 Log4J를 구성 할 수 있습니까? 다른하실 말씀 있나요?

추신 : 내 질문을 분명히했다고 생각합니다. 혼란이 있다면, 의견을 남겨주세요. :)

답변

1

이러한 방식으로 Log4J를 구성 할 수 있습니까?

즉, 사용자 정의 필터를 작성하지 않으면 log4j와는 관련이 없습니다. 그리고 그 필터는 각 로그 appender에게 그것을 만드는 각 로그 이벤트에 대한 콜 스택을 캡쳐하고 분석 할 필요가 있습니다 ... 그것은 비쌀 것입니다.

0

@Stephen C와 비싼 사용자 정의 로거없이 Log4j를 사용할 수 없다는 것에 동의합니다.

Logback이라는 또 다른 유사한 로깅 프레임 워크는 사용자 정의 appender에 대한 필요성을 제거하기에 충분할 수있는 두 가지 옵션을 지원합니다. 그들은 MDC (Mapped Diagnostic Contexts) 및 마커라고합니다.

마커는 사용자 지정 정보를 로깅 문에 추가 할 수있는 방법을 제공하며, 마커에서 마커를 사용하여 어떤 모듈이이 마커를 사용하는지에 따라 사용할 수 있습니다 (일반적인 패키지 사용 방법에 따라 다름).

MDC는 공용 모듈에서 코드로 들어가기 직전에 설정 한 다음 떠날 때 설정 해제하여 사용할 수 있습니다.

filter도 있습니다. 어느 쪽이든에 따라 appender로 필터링 할 수 있습니다.

관련 문제