我应该为每行日志使用try-with-resources语句吗?

时间:2015-05-12 14:49:33

标签: java java-7 writer try-with-resources

我想在每次发生事件时将(附加文本)记录到文件中。我发现使用Java 7的try-with-resources语句可能是正确的方法:

public void log(String textLine) {
    try(PrintWriter output = new PrintWriter(new BufferedWriter(new FileWriter("Logfile.txt", true)))) {
        output.println(textLine);
    }catch (IOException e) {
        //exception handling
    }
}

我担心的是这个日志方法被频繁调用,每次调用此方法时输出都会关闭并重新打开,这是不必要的。与此同时,我希望受益于Java 7的try-with-resources语句功能。

我的担忧不是必要的,因为重新打开和关闭作家并不是一项昂贵的操作吗?或者我应该使用Java 6的老式方法,即手动处理异常并将输出声明为成员字段并在应用程序结束时手动关闭输出?

1 个答案:

答案 0 :(得分:7)

不,每次要在日志文件中添加新行时,都应打开并关闭FileWriter

你应该:

  • 在应用程序开头打开日志文件
  • 追加
  • 致电flush()
  • 最后致电close()

或者如果要使用try-with-resources语句,则应将调用logger方法的代码放在try-with-resources语句的主体内。多亏了这一点,你不必调用close()方法,因为它会被自动调用。

然而,最好的解决方案是,使用现有的经过实战考验的开源记录器(如log4j或logback ),而不是重新安装车轮,其中包含所有这些内部细节和公开一个简单的API,允许您只记录提供的消息。