2016-06-14 1 views
0

에서 호출 한 위치를 기반으로 동일한 패키지에 대해 다른 파일에 로그를 남기고, 내 프로젝트에 3 개의 패키지가 있고 로그 용으로 log4j를 사용한다고 가정 할 수 있습니다. org.a, org.b, org.c 여기서 org.c는 패키지 'a'와 패키지 'b'를 호출하는 몇 가지 유틸리티 코드를 가지고 있습니다.log4j는

org.a에서 file1로 이동하고 org.b에서 file2로 이동하도록 로그를 구성하면 어떻게됩니까? 나는 'c'의 호출자가 'org.a'의 어떤 클래스이고 'c'의 호출자가 'org.b'의 어떤 클래스라면 file2에 패키지 'c'의 로그를 file1로 보내주기를 원합니다.

구성 기반 또는 프로그래밍 방식으로 알려 주시면 알려주세요. 내가 views이 병/전쟁 파일로 배포 apache ambari 프로젝트를 진행하고

:

주요 문제를 근본적인. 각보기는 고유 패키지 이름을 정의하며 모든 코드는 패키지 안에 있습니다. Ambari 프로젝트는 별도의 클래스 로더를 사용하여 이러한 jar/war를로드합니다. 그러나 log4j는 주요 Ambari 프로젝트에 의해 인스턴스화됩니다. 나는 그들의 패키지에 따라 log files for each view을 분리하고 PropertyConfigurator를 사용하여 loaded them dynamically을 구성했다. 문제는 현재 /contrib/views/commons과 같은 일반 패키지의 로그가 Ambari's log file으로 들어가고 개별보기의 로그 파일에 저장되지 않습니다. 패키지 이름을 기반으로 구성하면이 패키지의 모든 로그가 호출자보기를 기반으로하지 않고보기의 로그 파일 중 하나에 들어갑니다.

답변

0

공통 모듈의 로그 파일에 발신자 정보를 프린트하면 어떨까요?

+0

대체품으로 간주 될 수 있습니다. 그것을하는 어떤 우아한 방법? – Nitiraj

+0

로그 패턴에서 % C 또는 % class를 사용하십시오. https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout의 "Patterns"섹션을 참조하십시오. –

+0

아니요, % C는 로그가 기록되는 클래스입니다. 메서드 호출이 작성된 클래스를 인쇄하고 싶습니다. 예 : 클래스 A { someMethod() { \tBb = 새 B(); \t b.anotherMethod(); }} 클래스 B { \t anotherMethod() { \t \t LOG.info ("다른 방법이라고."); \t}} 있는 logfile.log B : 발신 A.someMethod : 불리는 다른 방법. – Nitiraj

관련 문제