2011-12-23 62 views
0

我在閱讀this,我感到困惑和困惑。Perl Log4perl同時在一行中打印和登錄

我是否應該使用ALWAYSprint_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"; } 
+0

感謝誰幫助編輯自己的帖子突出代碼的人 部分。我做了另一次編輯,強調總是實際上代碼和你的名字消失,所以我不知道你是誰:( – 2011-12-23 20:38:47

+0

如果你點擊它說的「X小時前編輯」,你會看到你的文章的修訂歷史記錄,包括所有編輯它的人的名字 – cjm 2011-12-23 22:16:45

+1

[Log4perl FAQ](http://log4perl.sourceforge.net/releases/Log-Log4perl/docs/html/Log/Log4perl/FAQ.html)回答了這個問題,方法。 – 2011-12-23 22:56:36

回答

6

你既不使用。

  • ALWAYS是一個日誌級別,將永遠無論選擇何種日誌記錄級別的打印。日誌記錄級別是控制記錄器根據所選級別記錄多少信息的一種方法

  • print_portfolio子例程是一個示例,與登錄到屏幕和文件的時間並沒有多大關係。

我相信Advanced configuration within 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);