2011-03-17 50 views
0

我想记录我的Java应用程序的日志。 我创建了这个类: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的,但只记录第一个按钮的点击,其他人点击其他按钮不记录。

你能帮我吗?

谢谢。

+0

待办事项你在其他按钮上有一个处理程序,就像你在第一个按钮上做的那样?另外,第二块中的代码与源代码中的完全相同吗?这看起来不会编译。 – justkt 2011-03-17 15:16:30

+0

你在使用java.util.logging吗?无论如何,每次单击按钮时都不应创建并向记录器添加处理程序。您应该添加处理程序一次(通过配置或代码),并且每次单击使用记录器记录消息。 – 2011-03-17 15:19:53

+0

这不是打算使用Logging API的方式。你应该在你的类中有一个'static final'成员字段'logger',从动作监听器调用'logger.info',并且有一个logging.properties配置记录的消息到文件中去。有没有理由不坚持你的情况? – 2011-03-17 15:20:26

回答

2

在您的应用程序中创建专有的日志记录封装没有什么意义 - java.util.logging已经是这样一个封装,所以我建议直接使用它。你应该在你的类创建日志对象,然后登录处理方法的东西中的消息是这样的:

logger.info("New Patient created"); 

而且你应该使用相同的Logger实例整个类,而不是创建新实例的所有时间。标准的方法是每个类创建一个static final实例。

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

我推荐通读Java Logging Tutorial

0

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

1

彼得Török和StriplingWarrior是对他们的建议,使用日志框架以正确的方式:的

logger.info("New Patient created"); 

,而不是创建每条语句一个新的记录器。


但即使在您的构建中,您应该有一个包含所有日志信息的日志文件。 对于日志构造函数的每次调用,都会创建一个新的my.log.X文件(X是一个数字)。从这时起,每个日志语句都记录在这个文件中。因此,如果您三次调用构造函数(消息:“first”,“second”,“third”),那么您应该拥有文件:my.log,my.log.1。 my.log.2

  • my.log: “第一”, “第二”, “第三”
  • my.log.1: “第二”, “第三”
  • my.log.2: “第三”