perl - log4perl : How to write ERROR message to file and DEBUG message to stderr?

标签 perl logging

我想将 ERROR 消息写入文件,并将 DEBUG 消息写入 stderr,然后我编写以下代码:

#!/usr/bin/perl

use strict;
use warnings;
use Log::Log4perl qw(:easy);

Log::Log4perl->easy_init(
        {
            file  => ">> error_log",
            level => $ERROR,
        },
        {
            file  => "STDERR",
            level => $DEBUG,
        }
        );

ERROR( "ERROR MESSAGE" );
DEBUG( "DEBUG MESSAGE" );
当我运行上面的代码时,消息 ERROR MESSAGEDEBUG MESSAGE写入文件和标准错误,谁能解释为什么?

最佳答案

要实现不同级别和同一类别的文件和屏幕的输出,您可以使用a custom filter .例如:

use feature qw(say);
use strict;
use warnings;
use Log::Log4perl qw(:easy);

my $conf   = <<'EOF';
log4perl.rootLogger             = DEBUG, file, screen
log4perl.filter.MatchDebug = Log::Log4perl::Filter::LevelMatch
log4perl.filter.MatchDebug.LevelToMatch  = DEBUG
log4perl.filter.MatchDebug.AcceptOnMatch = true

log4perl.filter.MatchError = Log::Log4perl::Filter::LevelMatch
log4perl.filter.MatchError.LevelToMatch  = ERROR
log4perl.filter.MatchError.AcceptOnMatch = true

log4perl.appender.file          = Log::Log4perl::Appender::File
log4perl.appender.file.filename = error_log.txt
log4perl.appender.file.mode     = append
log4perl.appender.file.utf8     = 1
log4perl.appender.file.Filter   = MatchError
log4perl.appender.file.layout   = SimpleLayout

log4perl.appender.screen         = Log::Log4perl::Appender::Screen
log4perl.appender.screen.stderr  = 1
log4perl.appender.screen.utf8    = 1
log4perl.appender.screen.Filter   = MatchDebug
log4perl.appender.screen.layout   = SimpleLayout
EOF

Log::Log4perl::init( \$conf );
ERROR( "ERROR MESSAGE" );
DEBUG( "DEBUG MESSAGE" );
另见 How to set two appenders with different log levels in Log::Log4perl?

关于perl - log4perl : How to write ERROR message to file and DEBUG message to stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65058171/

相关文章:

python - 按条件合并具有不同列信息的文件

perl - Moose - 确定是否已设置惰性属性

python - 配置 Logger 以在每次运行脚本时创建新文件

sql-server - 使用 SQL Server 处理大型数据集

python - 在线程中使用 Flask current_app.logger

启用 javascript 的按钮在 IE 中不正确发布

perl - 如何防止在调用new时设置Perl Moose只读属性?

perl - 如何停止在编译器阶段运行代码?

multithreading - 尝试重新定义 IO::Tee::PRINT 以确保线程安全

iis - IIS 日志中列出的浏览器列表