gpt4 book ai didi

perl - 如何将Perl警告捕获到Log4perl日志中?

转载 作者:行者123 更新时间:2023-12-03 23:22:30 26 4
gpt4 key购买 nike

Log4perl是一个很棒的日志记录工具。

warnings实用程序也是必不可少的工具。

但是,当Perl脚本作为守护程序运行时,Perl警告会打印到STDERR中,使任何人都看不到它们,而不是相关程序的Log4perl日志文件中。

有没有办法将Perl警告捕获到Log4perl日志中?

例如,此代码可以很好地记录到日志文件中,但是如果将其作为守护程序运行,则Perl警告将不包括在日志中:

#!/usr/bin/env perl
use strict;
use warnings;

use Log::Log4perl qw(get_logger);

# Define configuration
my $conf = q(
log4perl.logger = DEBUG, FileApp
log4perl.appender.FileApp = Log::Log4perl::Appender::File
log4perl.appender.FileApp.filename = test.log
log4perl.appender.FileApp.layout = PatternLayout
);

# Initialize logging behaviour
Log::Log4perl->init( \$conf );

# Obtain a logger instance
my $logger = get_logger("Foo::Bar");
$logger->error("Oh my, an error!");

$SIG{__WARN__} = sub {
#local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$logger->warn("WARN @_");
};

my $foo = 100;
my $foo = 44;


这仍然会打印到STDERR:

"my" variable $foo masks earlier declaration in same scope at log.pl line 27.


并且日志文件未捕获此警告。

最佳答案

在Log4perl常见问题解答中分别为Some module prints messages to STDERR. How can I funnel them to Log::Log4perl?My program already uses warn() and die(). How can I switch to Log4perl?

您的特定问题增加了皱纹,使您看到编译时警告,因此您需要调整FAQ建议,以尽早在编译时设置日志记录。尽可能在靠近源顶部的BEGIN块中执行此操作:

 BEGIN {
... all of your logging setup
}


您可以通过运行启用了警告的语法检查来判断它是否是编译时警告:

 % perl -cw program


如果您在语法检查期间看到警告,则为编译时警告。

不过,我宁愿在开发中捕获编译时警告。他们不应该将其贯穿到生产系统中。 :)

关于perl - 如何将Perl警告捕获到Log4perl日志中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com