【发布时间】:2012-08-28 05:45:57
【问题描述】:
我提出这个问题是因为我原来的问题似乎需要一个新的方向:my original question
我想创建一个正则表达式,可以从以下类型的日志条目中提取 STATIC MESSAGE 和 DYNAMIC MESSAGE:
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE Static 消息;动态消息
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 MODULE.NAME TYPE THREAD.OR.CONNECTION.INFORMATION 静态消息;动态消息
一种日志条目类型具有简单的结构:
file:date TYPE STATIC;DYNAMIC
另外一个在尝试用正则解析的时候就没那么简单了:
file:date MODULE.NAME TYPE CONNECTION.OR.THREAD STATIC;DYNAMIC
MODULE.NAME 和 CONNECTION.OR.THREAD 要么存在要么不存在。
到目前为止,我适用于第一种日志条目的正则表达式是:
(?:.*?):(?:\w{3} \d{1,2} \d{1,2}:\d{1,2}:\d{1,2})(?:\s+?)(?:[\S|\.]*?(?:\s*?))?(?:(?:TYPE1)|(?:TYPE2)|(?:TYPE3))(?:\s+?)(?:\S+?(?:\s+?))?(.+){1}(?:;(.+)){1}
但每当我进入第二种类型的条目时,我也会将 CONNECTION.OR.THREAD 作为我的第一个捕获组的一部分。
我希望找到一种使用前瞻或后视功能的方法,以便我可以捕获STATIC 和DYNAMIC,如果有MODULE.NAME,则忽略CONNECTION.OR.THREAD 部分?
我希望这个问题很清楚,如果看起来有点黯淡,请参考我的原作。谢谢。
编辑: 进行澄清。日志的每一行都不同,每一行都以文件路径开头,然后是:,然后是日期,格式如下:MMM DD HH:MM:SS,然后变得很棘手,要么是MODULE.NAME,它会有所不同,然后由同样变化的TYPE,然后是变化的CONNECTION.OR.THREAD,或者只有TYPE。之后是STATIC MESSAGE,然后是;,然后是DYNAMIC MESSAGE,静态和动态消息都不同,STATIC 一词的使用仅仅是因为错误可能是例如“无法连接到服务器; server1.com”,因此错误的静态部分是“无法连接到服务器”,而动态部分是“server1.com”
【问题讨论】:
-
您需要明确日志行的哪些部分是逐行变化的内容的占位符,哪些部分是真正静态的。对于可能发生变化的部分,说明可能性有限的列表也会有所帮助。
-
@MartijnPieters 我已经进行了编辑,希望它能解决问题。
-
“静态”是什么意思?是固定字符串/固定字符串列表吗?
-
@J.F.Sebastian 我在我的编辑中解释了它:“静态”消息有点令人困惑,假装它说“part1;part2”
-
@InbarRose:每次都能使用工具而不用射中自己的脚并不等于和他们相处得很好......
标签: python regex logging python-2.6