有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我应该为每一行日志使用trywithresources语句吗?

我想在每次有事情发生时都将日志(追加文本)记录到文件中。我发现这可能是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
    }
}

我担心的是,这个log方法经常被调用,每次调用这个方法时,输出都会关闭并重新打开,这是不必要的。同时,我想从Java7的trywithresources语句特性中获益

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


共 (1) 个答案

  1. # 1 楼答案

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

    你应该:

    • 在应用程序开始时打开日志文件
    • 追加
    • 调用flush()
    • 最后调用close()

    或者,如果您想使用try with resources语句,那么调用logger方法的代码应该放在try with resources语句的主体中。由于这一点,您将不必调用close()方法,因为它将被自动调用

    然而,最好的解决方案是使用一个现有的、经过战斗测试的开源记录器,如log4j或logback,它覆盖所有这些内部细节,并公开一个简单的API,允许您简单地记录提供的消息,而不是重新启动控制盘