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適切な機能とログレベルで使用します。)

関連情報