2008-11-26 38 views
4

當使用log4perl,我使用的調試日誌佈局:如何讓log4perl輸出更易於閱讀?

log4perl.appender.D10.layout=PatternLayout 
log4perl.appender.D10.layout.ConversionPattern=%d [pid=%P] %p %F{1} (%L) %M %m%n 
log4perl.appender.D10.Filter = DebugAndUp 

這將產生非常詳細的調試日誌,例如:

2008/11/26 11:57:28 [pid=25485] DEBUG SomeModule.pm (331) functions::SomeModule::Test Test XXX was successfull 
2008/11/26 11:57:29 [pid=25485] ERROR SomeOtherUnrelatedModule.pm (99999) functions::SomeModule::AnotherTest AnotherTest YYY has faled 

這個偉大的工程,並提供出色的調試數據。

但是,調試日誌的每一行都包含不同的函數名稱,pid長度等。這會使每行的佈局不同,並使讀取調試日誌比需要的難得多。

log4perl是否有一種方法來格式化該行,以便調試元數據(一切直到實際的日誌消息)被填充到空格/製表符的末尾,並讓實際的消息從同一列文本開始?

回答

8

您可以填充構成條目的單個字段。例如[pid =%5P]總會給你至少5個字符的PID。

Log :: Log4perl :: Layout的文檔中的"Quantify Placeholders" section提供了更多詳細信息。

+0

原始鏈路斷開,[此](http://search.cpan.org/~mschilli/Log-Log4perl-1.32/lib/Log/Log4perl/Layout/PatternLayout.pm#Quantify_placeholders)是工作一 – Samuel 2017-07-20 07:54:23

5

有幾種方法去這個問題,雖然你必須搞清楚哪一種方式更適合您的美好局面:

  1. 如果您正在現場使用不同的附加目的地。讓那個appender使用一個只顯示你想要的信息的模式。例如,如果您在單個進程中工作,則備用appender可能會遺漏PID和時間戳。您可能只需要文件名和行號。

  2. 使用%n將換行符放在正確的位置。這使得多行輸出稍後難以解析,但是您可以爲輸入記錄分隔符選擇另一個序列(例如,文字「[EOL]」),以便逐條輸入。

  3. 登錄到數據庫而不是文件。對於您的報告,請選擇您想要檢查的列。

  4. 記錄所有內容,但是編寫一個過濾器來通過日誌文件臨時顯示您想要查看的部分,例如僅顯示調試消息,某些時間之間的條目,僅涉及文件等等。