Perl Log4perl Печать и ведение журнала одновременно в строке
Я читаю это, и я запутался и застрял.
Должен ли я использовать ALWAYS
или же print_portfolio('themessage')
одновременно распечатать и войти в файл?
Что я хочу сделать:
if ($logfile) {
open (FILE, '>>', "logfile");
print "Hello" #some code from Log4perl#;
#prints on the display and into the logfile
}
вместо:
if ($logfile) { open (FILE, '>>', "logfile"); }
print "Hello";
if ($logfile) { print FILE "Hello"; }
1 ответ
Вы не используете ни один.
ALWAYS
это уровень журнала, который всегда печатается независимо от выбранного уровня журнала. Уровни ведения журнала - это способ контроля количества информации, регистрируемой регистратором, на основе выбранного уровня.print_portfolio
Подпрограмма является примером, который на самом деле не имеет ничего общего с одновременным входом на экран и в файл.
Я полагаю, что в разделе " Расширенная настройка в Perl " есть четкий пример того, как настроить регистратор для печати на экран и в файл одновременно:
Вот пример того, как настроить два приложения с одинаковым макетом в Perl без использования файла конфигурации:
######################## # Initialization section ######################## use Log::Log4perl; use Log::Log4perl::Layout; use Log::Log4perl::Level; # Define a category logger my $log = Log::Log4perl->get_logger("Foo::Bar"); # Define a layout my $layout = Log::Log4perl::Layout::PatternLayout->new("[%r] %F %L %m%n"); # Define a file appender my $file_appender = Log::Log4perl::Appender->new( "Log::Log4perl::Appender::File", name => "filelog", filename => "/tmp/my.log"); # Define a stdout appender my $stdout_appender = Log::Log4perl::Appender->new( "Log::Log4perl::Appender::Screen", name => "screenlog", stderr => 0); # Have both appenders use the same layout (could be different) $stdout_appender->layout($layout); $file_appender->layout($layout); $log->add_appender($stdout_appender); $log->add_appender($file_appender); $log->level($INFO);