重定向System.out并附加到现有文件

时间:2013-04-14 19:03:39

标签: java file logging io-redirection

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

请注意FileOutputStream的布尔参数,这指定应以 追加 模式打开流。

答案 1 :(得分:2)

只需在append mode中打开您的日志文件,如下所示:

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

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