2011-02-08 7 views
2

Java 응용 프로그램에서 로깅에 관한 질문이 있습니다. 사용자 친숙한 메시지로 주요 사용자 작업 및 가능한 오류를 기록하고 싶습니다. 따라서 로거에 대한 두 개의 appender가 있습니다. 하나는 대화 상자에 오류 (수준 = 오류)를 표시하고 다른 하나는 현재 사용자 세션의 로그를 html 파일에 기록하여 사용자가 문제가 발생하면이 파일을 다시 보낼 수 있도록합니다.Java 응용 프로그램에서 로거에 액세스

I는 로거 액세스 방법 갖는 클래스 앱의 구성 로거 고정 기준이 (= ... 개인 로거 로거) 모든 클래스 로거 생성을 피하기 위해 :

public class App { 
    private static Logger logger = Logger.getLogger("logger name"); 
    … 
    public static void logError(String message, Throwable cause) { 
    … 
    } 
    public static void logInfo(String message) { 
    … 
    } 
} 

을 로깅은 주로 UI 클래스에서 수행됩니다.

class UIWidget extends UIFrameworkWidget { 

    void aMethod() { 
     try { 
      someBusinessLogic(); 
     } catch (Exception e) { 
      App.logError(“log message”, e); 
     } 
    } 
} 

이 방법이 좋습니다. (위젯이 프레임 워크에 의해 생성되어 있습니다.)

덕분에 더 나은이

답변

2

에 대한 답변, 의견 또는 힌트를 사전에 단일 정적 로거 인스턴스를 사용하지만, 각 클래스는 개인을 만들 수 있도록하는 것입니다 클래스의 이름으로 초기화되는 인스턴스 (및 기타 정보). 이 개인 인스턴스는 정적 인스턴스를 사용하여 실제로 로깅을 수행하지만 필요에 따라 생략하고 외부 클래스에 대한 참조를 줄입니다.

이것은 사용하는 로깅 프레임 워크 인 slf4j입니다. 그러나 같은 방식으로 자신을 굴릴 수는 있습니다.

그러나 대화 상자에 오류 메시지가 표시되는 방법을 알지 못합니다. 명시 적으로 추가해야 할 수도 있습니다.

2

JDK 로거를 하위 클래스로 분류하는 것만으로도 충분합니다. 하나의 정적 인스턴스 만 있으면 런타임에 특정 클래스를 대상으로 지정할 수 없습니다. 로거를 하위 클래스 화하면 여전히 로깅 된 클래스로 많은 로거를 가질 수 있지만 여전히 appender의 특성을 유지할 수 있습니다.

당신은 또한 자신 만의 레이아웃을 만들 수 있습니다 (그리고 적어도 log4j에는 자리 표시 자도 추가해야합니다 - geronimo에 대한 예가 있습니다).

관련 문제