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