在 perl 脚本中,我捕获所有STDOUT
并STDERR
使用以下代码:
open STDOUT, '>>', "$log_file" or die "Can't redirect STDOUT: $!";
open STDERR, ">&STDOUT" or die "Can't add to STDOUT: $!";
main();
在这里,我记录了所有这些生成的内容main()
,但是如何在每一行前面添加时间戳STDOUT
?
答案1
我假设您想要这样做的原因是这样您就不必为每个打印语句包含“打印标量本地时间”。如果是这样,我建议以更简单的方式进行此操作。
不要在每个打印语句上使用,而是print
创建单独的函数来记录错误消息、信息消息和打印输出。像这样:
sub logmsg {
print (scalar localtime() . " @_\n");
}
sub logerr {
print STDERR (scalar localtime() . "ERROR: @_\n");
}
sub debug {
if ($debug) {
print "DEBUG: @_\n";
}
}
然后,在脚本中我将始终根据需要使用logmsg
或。logerr
这样可以通过更改这几个函数来轻松更改日志消息的位置。对于您的情况,您还可以更改日志函数以直接写入文件而不是 STDOUT/STDERR。 (就我自己而言,我经常使用 syslog 来代替,因此我将删除时间戳代码,并使用Sys::Syslog
具有适当设施和日志级别的eg。)