我有一个每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
中的内容。因此,我追加到文件末尾的尝试是多余的。
答案 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对象来表示此文件连接。