我有一个调用java程序的批处理文件。
将输出重定向到同一目录中的日志文件。 但是,每次运行批处理文件时都会替换日志文件...
我想将旧输出保留在日志文件中,并始终将新输出附加到日志文件中。
答案 0 :(得分:84)
而不是使用“>”像这样重定向:
java Foo > log
使用“>>”将正常的“stdout”输出附加到新文件或现有文件:
java Foo >> log
但是,如果您还想捕获“stderr”错误(例如无法启动Java程序的原因),您还应该使用“2>& 1”标记重定向“stderr”(“ 2“)到”stdout“(”1“)。例如:
java Foo >> log 2>&1
答案 1 :(得分:4)
这不是您原来问题的答案:“将批处理文件的输出附加到日志文件?”
作为参考,这是对你的后续问题的回答:“我应该在我的批处理文件中添加哪些行,这将使它在每30分钟后执行一次?”
(但我会接受Jon Skeet的建议:“你可能不应该在你的批处理文件中这样做 - 而是使用任务计划程序。”)
超时:
示例(1秒):
TIMEOUT /T 1000 /NOBREAK
睡眠:
示例(1秒):
sleep -m 1000
替代方法:
以下是您的第二个后续问题的答案:“与时间戳一起?”
Create a date and time stamp in your batch files
示例:
echo *** Date: %DATE:/=-% and Time:%TIME::=-% *** >> output.log
答案 2 :(得分:0)
在java程序中使用log4j。然后,您可以输出到多个媒体,创建滚动日志等,并包括时间戳,类名和行号。
答案 3 :(得分:0)
也可以使用java Foo | tee -a some.log
。它也只是打印到标准输出。喜欢:
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