将脚本错误连同日期和时间一起记录到文件中

将脚本错误连同日期和时间一起记录到文件中

我可以用来2> errorLogFile将正在运行的脚本的错误记录到文件中,对吗?我的问题是如何记录错误发生的日期和时间?

例如:

$ cat myScript
2> errorLogFile
..... # rest of the script

错误文件看起来应该是这样的:

$ cat errorLogFile
21 Nov 2015 2:00 PM some error happened

答案1

您可以重定向stderr到进程替代,该进程替代会处理stderr并将处理后的行输出到日志。

例如,此脚本将打印 5 行到stdout和 5 行到stderr,重定向stderr到一个进程替换,该进程替换将处理stderr并输出处理后的行到当前工作目录中名为“log”的文件(请注意,重定向的语法stderrexec 2> [...],而不是2> [...]):

#!/bin/bash
exec 2> >(perl -pe '$x=`date "+%d %b %Y %H:%M %p"`;chomp($x);$_=$x." ".$_' >log)
for i in {1..5}; do
    sleep 1
    echo "STDOUT message #$i"
    echo "STDERR message #$i" >&2
done
exit 0

过程替换调用 Perl,它将当前日期和时间以该格式附加到每一行,并将它们输出到当前工作目录中名为“log”的文件中。

% bash script.sh
STDOUT message #1
STDOUT message #2
STDOUT message #3
STDOUT message #4
STDOUT message #5
% cat log
02 Nov 2015 20:15 PM STDERR message #1
02 Nov 2015 20:15 PM STDERR message #2
02 Nov 2015 20:15 PM STDERR message #3
02 Nov 2015 20:15 PM STDERR message #4
02 Nov 2015 20:15 PM STDERR message #5

相关内容