How to add a timestamp to bash script log?
Solution 1:
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
Solution 2:
See ts
from the Ubuntu moreutils
package:
command | ts
Or, if $command
does automatic buffering (requires expect-dev
package):
unbuffer command | ts
Solution 3:
The date command will provide that information
date -u
Sat Sep 10 22:39:24 UTC 2011
so you can
echo $(date -u) "Some message or other"
is that what you wanted ?
Solution 4:
You can simply echo the command outputs to the logfile. ie,
echo "`date -u` `./script.sh`" >> /var/log/logfile
It really works :)
Example:
[sparx@E1]$ ./script.sh
Hello Worldy
[sparx@E1]$ echo "`date -u` `./script.sh`" >> logfile.txt
[sparx@E1]$ cat logfile.txt
Mon Sep 12 20:18:28 UTC 2011 Hello Worldy
[sparx@E1]$
Solution 5:
Make a config.sh
file
#!/usr/bin/env bash
LOGFILE="/path/to/log.log"
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
When you need to send to log file use
#!/usr/bin/env bash
source /path/to/config.sh
echo "$TIMESTAMP Say what you are doing" >> $LOGFILE
do_what_you_want >> $LOGFILE
Log file will looks like
2013-02-03 18:22:30 Say what you are doing
So it will be easy to sort by date