将批处理文件的输出附加到日志文件

时间:2010-12-16 07:01:34

标签: batch-file

我有一个调用java程序的批处理文件。

将输出重定向到同一目录中的日志文件。 但是,每次运行批处理文件时都会替换日志文件...

我想将旧输出保留在日志文件中,并始终将新输出附加到日志文件中。

4 个答案:

答案 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