2010-04-25 61 views
1

我在維護一些網站代碼,它將很快將其所有錯誤和警告轉儲到日誌文件中。爲了使這一點更加積極主動,我打算每天解析這個日誌文件,總結警告和錯誤(即通過警告/錯誤來計算每個特定人羣和組的發生),然後通過電子郵件發送給開發人員該項目。什麼CPAN模塊可以總結Perl錯誤日誌?

這可能會被認爲是一個散列和一些進一步的小事,而不是微不足道的,我想知道是否有一個合適的CPAN模塊可以用來完成這項任務。

它可能是一個專門彙總Perl錯誤/警告日誌或彙總任意文本文件的日誌。有什麼建議麼?

編輯:

我保持在它每天產生的警告50MB的狀態是繼承了該網站。我只想找一張我可以申請的bandaid來指出最多產的。 Log4Perl可以進來,一旦我用盡了關鍵的東西來解決,但是現在它不是一個選項。

+0

http:// stackoverflow可能存在重複。com/questions/2707392/what-c​​pan-module-can-send-all-warnings-and-errors-to-a-log-file – 2010-04-25 07:58:15

+4

我認爲這個問題是關於*閱讀*日誌,而不是創建它們。所以它不是重複的。 – Quentin 2010-04-25 08:16:08

回答

2

我認爲CPAN的具體和簡單的東西,因爲這可能是矯枉過正。假設日誌文件在默認的Apache錯誤格式:

[Mon Apr 26 15:39:34 2010] [error] [client 69.12.220.202] syntax error at /var/www/cgi-bin/errortest.cgi line 8, near "{}" 

這裏有一個快速班輪通過郵寄最高排序產生一個地址錯誤。輕易改變郵寄多個地址(或做出去多個地址的別名,併發送了這一點。

cat LOGFILE | 
perl -ple 's/\[\w+\s\w+\s\d+\s\S+\s\d+\]\s\[[^\]]+\]\s\[[^\]]+\]\s//;' | 
sort |  # Sort errors after 
uniq -c | # Uniqify with count 
sort -rn | # Sort line counts 
mail -s "Error list" [email protected] 

您可以輕鬆地在任何時候你找到最合適的一個的grep -v扔排除線。把它丟插入到cron的日常報告中,或將其放入腳本並添加到logrotate中。

+0

這不是一個CPAN模塊,但它是一個足夠低的科技成爲一個適當的下拉式bandaid,非常感謝。 :) – Mithaldu 2010-04-27 06:32:03

1

不是CPAN模塊,但loganalysis網站有一些非常有用的日誌解析和分析工具和信息。

此外,log_analysis可能值得一看在Perl中實現。

1

這裏不會有一個神奇的模塊可以處理任何日誌格式,包括人們在本地使用的編制日誌格式,您可以將它們扔進去。有什麼關於你的日誌格式?你有它的printf式的描述嗎?它看起來像是一種廣泛使用的格式嗎?

如果您要選擇錯誤消息的格式,請將它看起來像您喜歡的工具可以理解的東西。

你也可以考慮使用類似Log4perl的東西。您不僅可以指定您喜歡的任何格式,而且您可以在任意位置發送輸出。您甚至可以將輸出發送到數據庫,完全標準化,以便您的彙總程序實際上只是一些SQL。

更新

你澄清評論(雖然你沒有編輯你的問題澄清),這是警告和Perl的發出錯誤。在這種情況下,這聽起來像開發人員需要一個適當的測試套件來抓住所有這些東西。如果你正在用捕捉警告的計劃投入生產,那麼你的程序就會被破壞。

+0

你誤解了一下。日誌不會是任意的。它只包含基本的Perl錯誤和警告消息;每行一個。雖然Log4Perl可能真的是最佳的,但即使它意味着延遲整個事情,直到後來我可以找到時間來設置它。我真的只是在尋找一些我現在可以投入的小東西,並且隨它一起運行。 – Mithaldu 2010-04-25 15:27:05

+1

我沒有誤解:你沒有指定「錯誤和警告」是什麼。 Log4perl也不需要很長時間來設置。 – 2010-04-25 15:44:26

+1

Log4perl的+1。我在生產環境中使用它來將各種警告和錯誤從一開始就分離成單獨的文件(由錯誤類型,原始系統組件等分開),其中常規電子郵件報告只是逐字地發送這些文件。在源端分離內容要容易得多,因此下游消費者不必再將其解析回來,試圖找出每條線的重要性。 – Ether 2010-04-25 16:20:57