53

I have a batch file which calls a java program.

The output is redirected to a log file in the same directory. However the log file is replaced everytime the batch file is run...

I would like to keep the old outputs in the log file and always append the new output to the log file.

1
  • 1
    How do you redirect output ALSO to console as well as the log file? Commented Sep 20, 2012 at 17:32

4 Answers 4

121

Instead of using ">" to redirect like this:

java Foo > log

use ">>" to append normal "stdout" output to a new or existing file:

java Foo >> log

However, if you also want to capture "stderr" errors (such as why the Java program couldn't be started), you should also use the "2>&1" tag which redirects "stderr" (the "2") to "stdout" (the "1"). For example:

java Foo >> log 2>&1 
Sign up to request clarification or add additional context in comments.

10 Comments

Thanks, ">>" worked.....also can you please tell me what lines should i add to my batch file which will make it execute after every 30mins.....along with the Timestamp!
@Monojeet: You probably shouldn't do that in your batch file - instead, use Task Scheduler.
Actually this thing is going to be deployed accross many servers, so not possible to configure task scheduler on every server, a script will be handy!
@Monojeet: Well you're basically talking about writing your own scheduler as a script... which doesn't sound like a good idea to me. I'm sure it's possible to remotely configure scheduled tasks, and that would be a better way to go, IMO. If you really want to avoid that, I'd put the scheduling in a "proper" program (whether that's Java, a C# wrapper or whatever) rather than trying to do it in a batch file.
@Monojeet: You could always make your batch file invoke the Windows Task Scheduler, of course, using "at".
|
4

This is not an answer to your original question: "Appending output of a Batch file To log file?"

For reference, it's an answer to your followup question: "What lines should i add to my batch file which will make it execute after every 30mins?"

(But I would take Jon Skeet's advice: "You probably shouldn't do that in your batch file - instead, use Task Scheduler.")

Timeout:

Example (1 second):

TIMEOUT /T 1000 /NOBREAK

Sleep:

Example (1 second):

sleep -m 1000

Alternative methods:

Here's an answer to your 2nd followup question: "Along with the Timestamp?"

Create a date and time stamp in your batch files

Example:

echo *** Date: %DATE:/=-% and Time:%TIME::=-% *** >> output.log

Comments

0

Use log4j in your java program instead. Then you can output to multiple media, create rolling logs, etc. and include timestamps, class names and line numbers.

Comments

0

It's also possible to use java Foo | tee -a some.log. it just prints to stdout as well. Like:

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.