2013-12-23 3 views
7

몇 가지 클래스로 구성된 내 응용 프로그램에 로그인하고 싶습니다. 끝에 .txt 로그 파일 한 개를 갖고 싶습니다. 따라서 하나의 정적 로거 인스턴스를 만들고 하나의 클래스에서 FileHandler를 만들었습니다. 하나의 파일을 갖고 싶기 때문에 로깅하는 동안 로그 파일을 추가 할 수 있도록 FileHandler에서 두 번째 인수를 true로 설정했습니다.여러 클래스를 통한 Java 로깅

public class MyLogging { 
    static Logger logger; 
    public Handler fileHandler; 
    Formatter plainText; 

    public MyLogging() throws IOException{ 
     //instance the logger 
     logger = Logger.getLogger(MyLogging.class.getName()); 
     //instance the filehandler 
     fileHandler = new FileHandler("myLog.txt",true); 
     //instance formatter, set formatting, and handler 
     plainText = new SimpleFormatter(); 
     fileHandler.setFormatter(plainText); 
     logger.addHandler(fileHandler); 

    } 

그 후에 다른 로거를 만들었습니다. 클래스 당 하나의 로거를 인스턴스화해야한다는 것을 알고 있습니다. 따라서 각 클래스에 대한 로거 (w/o FileHandler) 만 만듭니다. 하지만 하나의 클래스를 참조하는 모든 로거 (클래스가 아닌, 내가 로거를 만든 곳). 예 :

로깅이 수행되었지만 이것이 올바른 해결책이라고 확신하지 못합니다. java.util.logging을 사용하여 여러 클래스를 통해 로깅하는 방법에 대해 조언 해 줄 수 있습니까?

+0

내가 혼란 스러워요. 하나의 Logger 인스턴스 만 사용하지 않고 끝에 하나의 로그 파일이 있어야합니다. –

답변

7

는 MyLogging 클래스에서 생성자 대신 publicprivate을하고, 다음과 같은 방법이 필요합니다

private static Logger getLogger(){ 
    if(logger == null){ 
     try { 
      new MyLogging(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return logger; 
} 
public static void log(Level level, String msg){ 
    getLogger().log(level, msg); 
    System.out.println(msg); 
} 

log 방법은 정적이므로이 클래스 이름을 사용하는 클래스에서 호출 할 수 있습니다.

그래서 모든 클래스에서, 당신은 단지 다음과 같이 로그 메소드를 호출 할 로그인 할 수 있습니다 :

public class Test1 { 
    //static Logger logger; //no need to create an object for logging 

    public Test1()throws IOException { 

     MyLogging.log(Level.INFO, MyLogging.class.getName()); //call log method using classname 
    }