【发布时间】:2014-07-31 03:59:58
【问题描述】:
我有一个如下所示的文本日志文件:
第 1 行 - 日期/用户信息 第 2 行 - LogEvent 的类型 第 3-X 行,带有附加信息的可变行数, 可能是 1,可能是数百然后序列重复。
大约有 20K 行日志,50 多种类型的日志事件,大约15K 单独的用户/日期事件。我想在 Python 中解析它并让这些信息可查询。
所以我想我会创建一个类 LogEvent 来记录用户、日期(我提取并转换为日期时间)、操作、描述......类似于:
类日志事件(): def __init__(self,date,user): self.date = date # 字符串转换为日期时间对象 self.user = 用户 自我内容 = ""每次解析一行包含用户/日期信息的文本时,都会创建这样一个事件。
要添加日志事件信息和任何描述性内容,可能是这样的:
def 分类(自我,日志事件): self.logevent = 日志事件 def addContent(self,lineoftext): self.content += 文本行要处理文本文件,我会使用 readline() 并一次处理一行。如果该行是用户/日期,我实例化一个新对象并将其添加到列表中......
新事件 = 日志事件(日期,用户) eventlist.append(新事件)并开始添加动作/内容,直到遇到新对象。
事件列表[-1].classify(logevent) 事件列表[-1].addContent(line)所有这些都是有道理的(除非你说服我有更聪明的方法或者我不知道的有用的 Python 模块)。我正在尝试确定在使用一组可能包含 50 多种可能类型的可能日志事件类型列表时如何最好地对日志事件类型进行分类,而且我不只是想接受整行文本作为日志事件类型。相反,我需要将行首与可能值列表进行比较...
我不想做的是拥有其中的 50 个:
如果 line.startswith("ABC"): 日志事件 = "foo" 如果 line.startswith("XYZ"): 日志事件 = “嘘”我曾考虑使用 dict 作为查找表,但我不确定如何使用“startswith”来实现它......任何建议都将不胜感激,如果我啰嗦了太多,我深表歉意。
【问题讨论】:
-
如果您告诉我们典型的“LogEvent 类型”行是什么样的以及您希望在
logevent属性中记录什么,将会有所帮助。此外,您是否将各种类型的日志事件放在一个列表中,或者更好的是一组?
标签: python events logging text processing