Java 我应该为每行日志使用try with resources语句吗?
我想在每次有事情发生时都将日志(追加文本)记录到文件中。我发现这可能是Java 7的try with resources语句实现这一点的正确方法:Java 我应该为每行日志使用try with resources语句吗?,java,java-7,writer,try-with-resources,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);
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
}
}
我担心的是,这个log方法经常被调用,每次调用这个方法时,输出都会关闭并重新打开,这是不必要的。同时,我想从Java7的trywithresources语句特性中获益
我的担心是不是没有必要,因为重新打开和关闭一个writer并不是一个昂贵的操作?或者我应该使用Java 6的老式方式,即手动处理异常,并将输出声明为成员字段,并在应用程序结束时手动关闭输出?不,您应该不每次要在日志文件中添加新行时,都打开并关闭
FileWriter
你应该:
- 在应用程序开始时打开日志文件
- 追加
- 调用
flush()
- 最后调用
李>close()
close()
方法,因为它将被自动调用
然而,最好的解决方案是使用一个现有的、经过战斗测试的开源记录器,如log4j或logback,而不是重新启动轮子,它涵盖了所有这些内部细节,并公开了一个简单的API,允许您简单地记录所提供的消息。您是否考虑过使用标准日志库,以便不必担心所有这些问题?这也将为您提供更大的灵活性,如日志级别和日志审核软件将能够更轻松地解析日志。自动调用“try with resource”
close()
:@SashaSalauyou“您做得根本不对,这里有一个更好的方法”是一个非常合理的答案。@Adam非常感谢您Adam,不仅为日志库(log4j、logbook)提供建议,还提供了手动执行的正确方法。