How to add a timestamp to bash script log?
I have a constantly running script that I output to a log file:
script.sh >> /var/log/logfile
I'd like to add a timestamp before each line that is appended to the log. Like:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
Is there any jujitsu I can use?
You can pipe the script's output through a loop that prefixes the current date and time:
./script.sh | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >>/var/log/logfile
If you'll be using this a lot, it's easy to make a bash function to handle the loop:
adddate() {
while IFS= read -r line; do
printf '%s %s\n' "$(date)" "$line";
done
}
./thisscript.sh | adddate >>/var/log/logfile
./thatscript.sh | adddate >>/var/log/logfile
./theotherscript.sh | adddate >>/var/log/logfile
See ts
from the Ubuntu moreutils
package:
command | ts
Or, if $command
does automatic buffering (requires expect-dev
package):
unbuffer command | ts