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>从调用者那里做一个。有没有办法从脚本中重定向它们?

4

3 回答 3

15

您可以安装一个$SIG{__DIE__}处理程序以在“die”运行之前运行。将使用您可以记录的错误消息调用处理程序:

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

有关详细信息,请参阅perlvar 中的$SIG{expr}

于 2010-10-15T07:00:34.523 回答
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 回答
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 回答