Apache访问日志regex解析

2024-10-01 07:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Apache的自定义访问日志:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{JSESSIONID}C %D %V" mylog

我试图从Python解析生成的日志;但是我有两个问题:

  • 没有请求方法(HTTP/1.0或HTTP/1.1)的请求无法正确解析。在
  • 请求路径中包含空格的请求没有被正确解析(我不知道Apache是将此路径保存为编码的还是保留了这些空格,但是我可以在telnet中生成一个手动请求的日志行)。在

使用此正则表达式:

^{pr2}$

此日志的前3行分析失败:

1.1.1.2 - - [11/Nov/2016:03:04:55 +0100] "GET /" 200 83 "-" "-" - 9221 1.1.1.1
127.0.0.1 - - [11/Nov/2016:14:24:21 +0100] "GET /uno dos" 404 298 "-" "-" - 400233 1.1.1.1
127.0.0.1 - - [11/Nov/2016:14:23:37 +0100] "GET /uno dos HTTP/1.0" 404 298 "-" "-" - 385111 1.1.1.1
1.1.1.1 - - [11/Nov/2016:00:00:11 +0100] "GET /icc HTTP/1.1" 302 - "-" "XXX XXX XXX" - 6160 11.1.1.1
1.1.1.1 - - [11/Nov/2016:00:00:11 +0100] "GET /icc/ HTTP/1.1" 302 - "-" "XXX XXX XXX" - 2981 1.1.1.1

{a1}可以在这里模拟。在


Tags: 路径httpgetapachenovagentxxxuno
1条回答
网友
1楼 · 发布于 2024-10-01 07:21:19

尝试以下解决方案: https://regex101.com/r/xDfSqj/4

和你一样,除了:

(?P<ip>.*?) (?P<remote_log_name>.*?) (?P<userid>.*?) \[(?P<date>.*?)(?= ) (?P<timezone>.*?)\] \"(?P<request_method>.*?) (?P<path>.*?)(?P<request_version> HTTP/.*)?\" (?P<status>.*?) (?P<length>.*?) \"(?P<referrer>.*?)\" \"(?P<user_agent>.*?)\" (?P<session_id>.*?) (?P<generation_time_micro>.*?) (?P<virtual_host>.*)

在HTTP/1.0周围添加了一个捕获组,并给出了?量词。这也被添加到你的其他组,以防止贪婪的捕获。在

这就是你想要达到的目的吗?在

相关问题 更多 >