log4perl:如何将 ERROR 消息写入文件并将 DEBUG 消息写入 stderr?
log4perl: How to write ERROR message to file and DEBUG message to stderr?
我想把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 MESSAGE
和DEBUG MESSAGE
写入文件和stderr,谁能解释为什么?
实现不同层级、同一分类同时输出到文件和屏幕,可以使用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" );
另见
我想把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 MESSAGE
和DEBUG MESSAGE
写入文件和stderr,谁能解释为什么?
实现不同层级、同一分类同时输出到文件和屏幕,可以使用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" );
另见