Java通过多个类进行日志记录

时间:2013-12-23 06:08:21

标签: java logging java.util.logging

我想登录我的应用程序,其中包含几个类。我想在最后有一个.txt日志文件。因此,我创建了一个静态记录器实例,并在一个类中为它创建了一个FileHandler。因为我想拥有一个文件,所以我在FileHandler中将第二个参数设置为true,以便能够在日志记录期间附加日志文件。

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);

    }

之后,我创建了其他记录器。我知道我必须为每个类实例一个记录器。因此我只为每个类制作记录器(没有FileHandler)。但所有的记录器都引用了一个类(不是我创建记录器的类)。 E.g:

public class Test1 {
    static Logger logger;

    public Test1()throws IOException {

        logger = Logger.getLogger(MyLogging.class.getName());
    }

虽然执行了日志记录,但我不确定这是否是正确的解决方案。 你能给我一些建议如何使用java.util.logging来记录多个类吗?

1 个答案:

答案 0 :(得分:7)

在MyLogging类中,创建构造函数private而不是public,您需要以下方法:

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
    }