2016-04-29 50 views
2

我需要將重要事件消息收集到單獨的日誌文件。 (常規日誌非常臃腫,意味着需要維護,而用戶只對極少數事件感興趣。)將重要事件消息指向單獨的Log :: Log4perl記錄器

儘管所有ERROR級別和事件都被視爲「重要」,但事件並不與級別相關。許多這樣的事件都是INFO或WARN級別的。因此,級別閾值或匹配似乎不是答案。

此外,事件不限於層次結構的給定分支。這些可以從整個應用程序發出,所以「類別」似乎也不適合,或者它們是?

編輯: 目前,我有一個INFO級別一般情況下,維修記錄和警告級別的屏幕記錄器

有沒有辦法實現了與登錄:: Log4perl這樣的記錄?

問候

梅厄

+0

你如何決定,這是 「_significant_」? 「_events_」是什麼意思 - 在事件驅動的編程中,或者在通用意義上,只是消息(打印等)? – zdim

+0

我的意思是「事件」在一個非常普遍的意義上,就是出現一些對用戶來說很重要的事情,例如增加一個新客戶。至於我怎麼決定,它取決於可能性,類似於一個新的水平,說「注」和'$記錄器 - >注意(......);' – MeirG

+0

考慮到開放性在決策方面(在代碼中),可能使用[自定義過濾器](http://search.cpan.org/~mschilli/Log-Log4perl-1.47/lib/Log/Log4perl .pm#Custom_Filters)可能有幫助嗎?有一個單獨的類,[Log :: Log4Perl :: Filter](http://search.cpan.org/~mschilli/Log-Log4perl-1.47/lib/Log/Log4perl/Filter.pm)。 – zdim

回答

2

你可以使用一個filters

log4perl.logger = WARN, Log1, Log2 
log4perl.filter.Filter1  = sub { ... } 
log4perl.filter.Filter2  = sub { ... } 
log4perl.appender.Log1  = Log::Log4perl::Appender::Screen 
log4perl.appender.Log1.Filter = Filter1 
log4perl.appender.Log2  = Log::Log4perl::Appender::File 
log4perl.appender.Log2.Filter = Filter2 

或者你可以寫自己的過濾器從Log::Log4perl::Filter繼承包:

log4perl.logger = WARN, Log1, Log2 
log4perl.filter.Filter1  = MyApp::Log::Filter1 
log4perl.filter.Filter2  = MyApp::Log::Filter2 
log4perl.appender.Log1  = Log::Log4perl::Appender::Screen 
log4perl.appender.Log1.Filter = Filter1 
log4perl.appender.Log2  = Log::Log4perl::Appender::File 
log4perl.appender.Log2.Filter = Filter2 
+0

我之所以選擇這個答案,是因爲我更喜歡單個記錄器寫入兩個文件,而不是同樣執行下面的「額外類別」。有點惱人的是,過濾器正在檢查的字符串出現在所有條目中。 – MeirG

3

您可以通過在你的Log4perl添加an additional category實現這一目標。

分類也被稱爲「記錄儀」在Log4perl,它們指的是同樣的事情,這些術語可互換使用

你可以抓住一個額外的記錄是這樣的:

my $important_logger = Log::Log4perl->get_logger("Important"); 

該類別可以有其自己的配置:

log4perl.logger.Important    = TRACE, ImportantApp 
log4perl.additivity.Important   = 0 
log4perl.appender.ImportantApp   = Log::Log4perl::Appender::File 
log4perl.appender.ImportantApp.filename = important.log 

ImportantApp名稱它用於Appender實例,它在兩條底線中配置。第一行的基本含義:

發送與日誌級別TRACE或更高名爲ImportantApp的Appender的一切。

Important是記錄器,或類別的名字,我們與get_logger("Important")上述抓起。