
有沒有人曾經使用/建立過一個簡單的 unix/linux 日誌解析器,可以解析以下日誌:
timestamp log_message \n
對訊息進行排序,解析時間戳,然後返回:
- 所有訊息
- 特定日期之後的訊息(--since)
- 特定日期之前的訊息(--直到)
- --since、--until 的組合
我可以寫這樣的東西,但不確定是否有罐頭的東西。它非常適合我計劃要做的一些自動報告。
答案1
看一眼我寫的這個Python程式看看它是否接近您正在尋找的東西或可以適應您的需求。
答案2
即使你找到了一個,我也不知道我是否會相信它。例如,由於無法事先知道時間戳,因此它唯一可以區分 DD-MM-YYYY 和 MM-DD-YYYY 的方法就是提前讀取,直到 xx 或 zz 與 xx-zz-YYYY 大於12. 我確信還有其他問題。
我認為編寫自己的程式碼會更容易且更可靠,因為您可以使用語言的標準字串來建立日期時間庫並明確指定日期格式說明符。
以 Python 為例:
import re
from datetime import datetime
line_regex = re.compile(
r'''
\[
(?P<day> \d{1,2} )
/
(?P<month> \w{3} )
/
(?P<year> \d{4} )
:
(?P<hour> \d{2} )
:
(?P<minute> \d{2} )
:
(?P<second> \d{2} )
\s
(?P<timezone> -?\d{4} )
\]
''', re.VERBOSE)
new_entry['time'] = datetime.strptime(
parsed_line['day'] +
parsed_line['month'] +
parsed_line['year'] +
parsed_line['hour'] +
parsed_line['minute'] +
parsed_line['second']
, "%d%b%Y%H%M%S"
)
如果您確實想要一個模組/函式庫來嘗試找出它們確實存在的格式,Perl 的一個選擇是日期::解析。
答案3
我找到的唯一解決方案是系統日誌記錄到資料庫(此時它被簡化為簡單的 SQL 查詢)—假設您集中記錄所有內容,這不會增加太多額外的麻煩。
(在此插入明顯的好處和明顯的警告)