I am having a problem with logging to output from an automated build.
The build is done with a Makefile and the makefile utility.
The problem is that normal output like compiler command lines go to stdout and compile errors go to stderr.
I want to get the output from the build as it would show on the screen. So something like:
(stdout) CC -c file.cpp
(stderr) Compile error at file.cpp line 232, blah blah blah
(stdout) CC -c file2.cpp
What I tried (from a ksh script) is:
make -k > build.log 2> build.log
This results in a single log file but the problem is that the streams are buffered and so the result in the log file is all mixed up.
I could capture the output into 2 separate log files but then I would have no info on how to glue them back together into a single log file.
Is there a way to turn off buffering for stdout and stderr in this case?
As mentioned in #6099: all log messages should go to stderr instead of stdout. command API related output should use a dedicated interface that outputs to stdout.
The stdout. log file is a console logging file that has poor log management which causes the file to grow too large. PROBLEM DESCRIPTION. From PingFederate 9.0 onwards: 1) If an OS service start up script is being used or <pfinstall>/sbin/pingfederate-run.sh, output can be sent to stdout.
Programs are also free to explicitly close stdout or stderr ; if they do not do so, these streams will be closed upon program termination. Closing any output stream requires flushing any data that has not yet been written to the stream.
In C, file output is block buffered. Output to stdout is line buffered. The stderr device is unbuffered.
make -k > build.log 2>&1
This should work better for you because it is not redirecting stderr and stdout separately, but redirecting stderr to stdout, which should make the buffering sync up.
If you want to log it to a file as well as print it to the console:
make -k 2>&1 | tee build.log
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With