加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将Perl警告记录到Log4perl日志中?

发布时间:2020-12-15 21:12:29 所属栏目:大数据 来源:网络整理
导读:Log4perl是一个很好的记录工具. warnings编译也是必不可少的工具. 但是,当Perl脚本作为守护进程运行时,Perl警告将打印到STDERR中,而没有人可以看到它们,而不是相关程序的Log4perl日志文件. 有没有办法将Perl警告记录到Log4perl日志中? 例如,该代码将日志文
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 FAQ中为 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

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

我宁愿在开发过程中捕获编译时警告.他们不应该通过生产系统.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读