Perl Log4perl Печать и ведение журнала одновременно в строке - PullRequest
1 голос
/ 24 декабря 2011

Я читаю это , и я запутался и застрял.

Следует ли мне использовать 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 Ответ

6 голосов
/ 24 декабря 2011

Вы не используете ни один из них.

  • 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);
...