我有一个批处理文件,它调用了一个Java程序。
输出被重定向到同一目录下的日志文件中。 然而,每次运行批处理文件时都会替换日志文件...
我希望将旧的输出保留在日志文件中,并始终将新的输出追加到日志文件中。
我有一个批处理文件,它调用了一个Java程序。
输出被重定向到同一目录下的日志文件中。 然而,每次运行批处理文件时都会替换日志文件...
我希望将旧的输出保留在日志文件中,并始终将新的输出追加到日志文件中。
不要像这样使用">"进行重定向:
java Foo > log
使用 ">>" 将正常的 "stdout" 输出追加到一个新文件或现有文件中:
java Foo >> log
但是,如果你想要捕获 "stderr" 错误(例如 Java 程序无法启动的原因),你还应该使用 "2>&1" 标签,这会将 "stderr"(代表 "2")重定向到 "stdout"(代表 "1")。例如:
java Foo >> log 2>&1
这不是针对你最初的问题:“如何将批处理文件的输出附加到日志文件中?”的答案。
供参考,这是针对你后续问题的答案:“我应该在批处理文件中添加什么行来使它每30分钟执行一次?”
(但我会采纳Jon Skeet的建议:“你可能不应该在批处理文件内这样做 - 取而代之,使用任务计划程序。”)
Timeout:
示例(1秒钟):
TIMEOUT /T 1000 /NOBREAK
Sleep:
示例(1秒钟):
sleep -m 1000
替代方法:
这是你第二个后续问题的答案:“加上时间戳?”
示例:
echo *** 日期:%DATE:/=-% 时间:%TIME::=-% *** >> output.log
你也可以使用java Foo | tee -a some.log
。它会同时将输出打印到 stdout 和某个日志文件中,例如:
user at Computer in ~
$ echo "hi" | tee -a foo.txt
hi
user at Computer in ~
$ echo "hello" | tee -a foo.txt
hello
user at Computer in ~
$ cat foo.txt
hi
hello
在你的Java程序中使用log4j代替。这样你就可以输出到多个媒体,创建滚动日志等,并包括时间戳、类名和行号。