![Unix/Linux 简单日志解析器 (自、至)](https://linux22.com/image/516326/Unix%2FLinux%20%E7%AE%80%E5%8D%95%E6%97%A5%E5%BF%97%E8%A7%A3%E6%9E%90%E5%99%A8%20(%E8%87%AA%E3%80%81%E8%87%B3).png)
是否有人曾经使用过/创建过简单的 unix / linux 日志解析器,可以解析如下日志:
timestamp log_message \n
对消息进行排序,解析时间戳并返回:
- 所有消息
- 特定日期之后的消息(--since)
- 特定日期之前的消息 (--until)
- --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 查询)——假设您集中记录所有内容,这不会增加太多额外的麻烦。
(在此插入明显的好处和明显的警告)