Log4perl - отличный инструмент для ведения журнала.
Предупреждения Прагма также является важным инструментом.
Однако, когда сценарии 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.
И файл журнала не перехватывает это предупреждение.