2012-06-03 2 views
0

사용중인 서비스에 따라 로그 파일을 분리하여 로깅해야합니다. 그래서 service1이 &이고 service2.log가 & service2.log 인 것으로 가정합니다.Log4j 다중 로그 파일 및 공통 코드 로그인

두 가지 서비스에서 공통적 인 코드가 사용되고 있다는 것이 문제입니다. 이제 공통 코드가 서비스 중 하나에 의해 호출되고 특정 로그 파일에 로그인하는 경우 로그를 어떻게 작성합니까?

내가 로거를 생성하고있는 방법은

private static final Logger logger = Logger.getLogger(ClassName.class); 

나는이 방법 레벨 대신에 로거를 공통 코드에 문자열 (로거 이름)을 전달하고 만드는 것입니다 핸들로 생각하고 방법입니다 수업.

예 :

someMethodInCommonCode(String loggerName) { 
    Logger logger = Logger.getLogger(loggerName); 
} 

나는 log4j에 너무 같아요 오버 헤드되지 않습니다 방법 로거를 만들 로거의 캐시를 유지 관리 읽었습니다.

그리고 로거 이름이 전달되는 것을 좋아하지 않습니다. 위 시나리오 나 다른 아이디어를 얻을 수있는 방법이나 구성이 있습니까? 당신의 서비스가 다른 스레드에서 실행하는 경우

+0

@buc에서 제안한대로 MDC를 사용하여 구현되었습니다. 방법을 알아 보려면 [blogsbyabdullah] (http://blogsbyabdullah.blogspot.in/2012/06/logging-to-different-log-files-based-on.html)를 방문하십시오. –

답변

3

당신은 중첩/매핑 진단 컨텍스트 (NDC 또는 MDC)의 log4j의 기능을 사용할 수 있습니다 현재 스레드를 확인하고 로거를 선택할 수 있습니다. 본질적으로 이것은 "대역 외"정보이며 스레드별로 저장되며 로그 작업이 수행 될 때 자동으로 로깅 이벤트에 첨부됩니다. NDC의 정보를 로그 파일에 출력하거나 appender간에 로그 메시지를 라우팅하는 데 사용할 수 있습니다. 이것이 바로 필요한 것입니다. 이 on the official wiki of log4j에 대한 자세한 정보를 찾을 수 있습니다.

공통 코드를 호출하기 전에 서비스의 NDC에 서비스 이름 또는 다른 식별자를 저장할 수 있습니다. 그런 다음 NDC에있는 서비스 이름에 따라 일반 로그 메시지를 적절한 출력 파일로 라우팅하도록 log4j 필터를 구성 할 수 있습니다. 공통 코드는 수정할 필요가 없습니다.