DIE関数の出力をPERLのファイルにリダイレクトするにはどうすればよいですか?
質問
リダイレクトしたい die
別のファイルにメッセージを送信して、後でそのファイルを比較して何がうまくいかなかったかを判断できるようにします。
しかし、このコードは私にエラーを与えます:
$ cat test.pl
use strict;
use warnings;
my $log = "msglog.log";
die $log "DEAD$!";
$ perl test.pl
Missing comma after first argument to die function at test.pl line 5, near ""DEAD$!";"
Execution of test.pl aborted due to compilation errors.
$
やりたくない 2>
発信者から。スクリプト内からそれらをリダイレクトするための途方はありますか?
解決
Perl's die
プリントへ STDERR
したがって、リダイレクトできます STDERR
ファイルへ。
#!/usr/bin/env perl
# the path above depends on your system
open(STDERR, ">>", "errlog.log");
die "Hello";
他のヒント
インストールできます $SIG{__DIE__}
「ダイ」が実行される直前に実行されるハンドラー。ハンドラーは、ログに記録できるエラーメッセージで呼び出されます。
local $SIG{__DIE__} = sub {
my ($message) = @_;
# log the message
};
見る $ sig {expr} 詳細については、Perlvarで。
Log::Log4perl
モジュールはいくつかのオプションを提供します。
エラーメッセージをSTDERRとLogFileの両方に出力することを選択できます。
my $logger = Log::Log4perl->init ( 'log.conf' );
# Configuration file controls what to output, like time, line number, class...
$logger->get_logger ( 'Hello::World' ); # Define which class logger to use
.
.
.
open my $fh, '<', $file
or $logger->logdie ( "Log the demise: $!" ); # ... and die;
セットアップの面ではもう少し労力が必要ですが、その柔軟性は非常に多くの可能性を解き放ちます。
所属していません StackOverflow