我想将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.
$
Run Code Online (Sandbox Code Playgroud)
我不想2>从来电者那里做一个.有没有办法从脚本中重定向它们?
Eug*_*ash 15
您可以安装一个$SIG{__DIE__}处理程序,以便在"die"运行之前运行.将使用您可以记录的错误消息调用该处理程序:
local $SIG{__DIE__} = sub {
my ($message) = @_;
# log the message
};
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅perlvar中的$ SIG {expr}.
wkl*_*wkl 10
Perl的die打印,STDERR以便您可以重定向STDERR到文件.
#!/usr/bin/env perl
# the path above depends on your system
open(STDERR, ">>", "errlog.log");
die "Hello";
Run Code Online (Sandbox Code Playgroud)
该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;
Run Code Online (Sandbox Code Playgroud)
虽然在设置方面需要更多的努力,但其灵活性释放了大量潜力.