java logger从另一个类调用

时间:2014-06-24 02:41:52

标签: java logging

我从java学习这个记录器并尝试从主类调用MyLogger类但它似乎没有工作

MyLogger.java

public class MyLogger {

    public MyLogger() {

        Logger logger = Logger.getLogger("MyLog");
        FileHandler fh;
        try {

        fh = new FileHandler("c:\\opt\\MyLogFile.log", true);
        logger.addHandler(fh);
        logger.setLevel(Level.ALL);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);
        logger.log(Level.WARNING,"My first log");

        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Client.java

public class Client {
    private final static Logger LOGGER = Logger.getLogger(Client.class.getName());

    public static void main(String[] args) {
        LOGGER.setLevel(Level.SEVERE);
        LOGGER.getName();
        LOGGER.getClass();
        LOGGER.info("ABC");


    }
}
  1. 为什么不调用MyLogger.java来创建日志文件?
  2. 是否有更好的方法来记录eclipse控制台而不是为每个类的每个方法放置LOGGER?
  3. 为什么有些人在关闭日志文件之前使用flush()?

1 个答案:

答案 0 :(得分:1)

  

为什么不调用MyLogger.java来创建日志文件?

如果 指的是运行Client,那就是因为该类与您的MyLogger类之间没有任何关系。

  

是否有更好的方法来记录eclipse控制台而不是放置   关于每个类的每个方法的LOGGER?

更好是非常主观的。我见过的大多数源代码都使用了您在Client课程中使用的范例。也就是说,声明一个带有封闭类名称的static final Logger,并在需要在该类中记录内容的地方使用它。

某些应用程序使用AOP概念进行记录。

  

为什么有些人在关闭日志文件之前使用flush()?

某些实现可能会缓冲日志消息,以便不进行许多小型IO系统调用,而是制作少量大型系统调用。关闭日志文件可能无法刷新缓冲区,因此您需要明确flush它。