Java记录器问题

时间:2011-03-17 15:13:19

标签: java logging

我想记录我的Java应用程序的日志。 我创建了这个类:

public class Log {

    final Logger logger = Logger.getLogger("DigiScope.log");

    public static void main(String[] args) {
    }

    public Log(String message) {
        try {
            // Create an appending file handler
            boolean append = true;
            FileHandler handler = new FileHandler("my.log", append);

            // Add to the desired logger
            Logger logger = Logger.getLogger("com.mycompany");
            logger.addHandler(handler);
            logger.info(message);

        } catch (IOException e) {
        }

    }
}

对于每个按钮,我都有这样的代码:

private void btnNewPatient ActionPerformed(java.awt.event.ActionEvent evt) {
Log a = new Log("New Patient created");
}

此代码创建一个log.txt,但仅记录第一个按钮上的单击,其他按钮上的其他按钮不记录。

你能帮助我吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

在你的应用程序中创建一个专有的日志包装器没有多大意义 - java.util.logging已经是这样的包装器,因此我建议直接使用它。您应该在类中创建记录器对象,然后在处理程序方法中记录消息,如下所示:

logger.info("New Patient created");

您应该在整个班级中使用相同的Logger实例,而不是始终创建新实例。标准方法是为每个类创建一个static final实例。

最好从配置文件配置日志记录,而不是从代码配置。

我建议您阅读Java Logging Tutorial

答案 1 :(得分:1)

PéterTörök和StriplingWarrior建议他们以正确的方式使用Logging框架:

logger.info("New Patient created");

而不是为每个语句创建一个新的Logger。


但即使你的构造,你应该有一个包含所有日志信息的日志文件。 对于Log构造函数的每次调用,都会创建一个新的my.log.X文件(X是一个数字)。此时,每个日志语句都会记录在此文件中。

因此,如果您调用构造函数三次(使用消息:“first”,“second”,“third”),那么您应该拥有文件:my.log,my.log.1。 my.log.2

  • my.log:“first”,“second”,“third”
  • my.log.1:“second”,“third”
  • my.log.2:“第三”

答案 2 :(得分:0)

我猜它可能记录了每次点击,但是你用每个新的日志消息重新打开文件,而不是附加到它。