Perl Log4perl在一行中同时打印和记录

时间:2011-12-23 20:27:32

标签: perl logging printing log4perl

我正在阅读this,我感到困惑和困惑。

我应该使用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 个答案:

答案 0 :(得分:6)

你不使用。

  • ALWAYS是一个日志级别,无论选择何种日志记录级别,它都将始终打印。记录级别是一种控制记录器根据所选级别记录的信息量的方法

  • print_portfolio子例程是一个与同时登录屏幕和文件无关的例子。

我相信Advanced configuration within Perl部分有一个明确的例子,说明如何设置记录器同时打印到屏幕和文件:

  

这是一个如何使用相同配置两个appender的示例   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);