在 perlscript 内的每个 STDOUT 行之前添加时间戳

在 perlscript 内的每个 STDOUT 行之前添加时间戳

在 perl 脚本中,我捕获所有STDOUTSTDERR使用以下代码:

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。)

相关内容