使用RegEX解析Apache日志时出错?

时间:2013-05-31 06:54:19

标签: regex log4j

我正在解析apache日志条目

59.167.203.103 - - [28/May/2013:03:12:47 +0000] "POST /some/some.htm HTTP/1.1" 200 1187 "-" "xyzf/2.00.16 xyzNetwork/609.1.4 xyzwin/13.0.0"

以下给出RegEx及其正常工作。

String logentrypattern = "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\"";

但是在少数条目中 responsebytes 是“ - ”而不是某些值,这让我跟随erorr并说无法解析。请帮忙

Bad log entry (or problem with RE?):
89.178.46.54 - - [24/May/2013:17:04:59 +0000] "PUT /xyz-pmp/xyz-pmp.htm HTTP/1.1" 200 - "-" "kdm/1.0"

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

^([\\d.]+) (\\S+) (\\S+) \\[([\\w:\/]+\\s[+\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+|-) \"([^\"]+)\" \"([^\"]+)\"
                                                                                 ^^

我添加了你可以破折号的位。也许在那里有一个\\S+区块会更好吗?嗯,这完全取决于你正在做什么。如果意图只接受带数字的条目,那么你的正则表达式正在按预期工作。如果它只是捕获条目的不同部分,请确保您知道数据的结构以及它们可以提供给您的不同形式。

相关问题