3

我有一个每 10 分钟运行一次的 Java 程序。我想捕获这个过程的日志,例如考虑(我的程序本质上是做什么的):

public static void someFunction()
{
    System.setOut(new PrintStream(LOG_DIR));
    System.out.append("whatever I am appending about my program")
}

在这种情况下someFunction,将main每 10 分钟调用一次。但是,它总是覆盖由LOG_DIR. 我认为这是因为它只是创建了一个新文件并保存了以前在 file 中的内容LOG_DIR。因此,我尝试追加到文件末尾是多余的。

  1. 当函数每 10 分钟调用一次时,我的程序如何写入某个文件的末尾?
4

2 回答 2

4

最好的解决方案是利用几个现有的日志框架之一。但是,如果您坚持自己滚动,则需要附加到输出文件,而不是覆盖它:

System.setOut(new PrintStream(new FileOutputStream(LOG_DIR, true)));

注意 的布尔参数FileOutputStream,它指定流应该以附加模式打开。

于 2013-04-14T19:11:07.580 回答
3

只需以附加模式打开您的日志文件,如下所示:

System.setOut(new PrintStream(new FileOutputStream(LOG_DIR, true)));

它创建一个文件输出流以写入由指定 File 对象表示的文件。如果第二个参数为真,那么字节将被写入文件的末尾而不是开头。创建一个新的 FileDescriptor 对象来表示此文件连接。

于 2013-04-14T19:13:31.627 回答