7

メッセージを別のファイルにリダイレクトして、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>発信者からのa を実行したくありません。スクリプト内からリダイレクトする方法はありますか?

4

3 に答える 3

15

$SIG{__DIE__}「ダイ」が実行される直前に実行されるハンドラーをインストールできます。ハンドラーが呼び出され、ログに記録できるエラー メッセージが表示されます。

local $SIG{__DIE__} = sub {
    my ($message) = @_;
    # log the message        
};

詳細については、perlvar の$SIG{expr}を参照してください。

于 2010-10-15T07:00:34.523 に答える
10

このLog::Log4perlモジュールには、いくつかのオプションがあります。

エラーメッセージをSTDERRとログファイルの両方に出力することを選択できます。

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;

セットアップに関してはもう少し手間がかかりますが、その柔軟性は大きな可能性を解き放ちます。

于 2010-10-15T07:57:16.210 に答える
10

Perldieは に出力するSTDERRのでSTDERR、ファイルにリダイレクトできます。

#!/usr/bin/env perl
# the path above depends on your system

open(STDERR, ">>", "errlog.log");
die "Hello";
于 2010-10-15T07:02:50.500 に答える