DIE関数の出力をPERLのファイルにリダイレクトするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3940106

  •  30-09-2019
  •  | 
  •  

質問

リダイレクトしたい 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;

セットアップの面ではもう少し労力が必要ですが、その柔軟性は非常に多くの可能性を解き放ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top