首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache访问日志regex解析

Apache访问日志regex解析
EN

Stack Overflow用户
提问于 2016-11-11 13:33:34
回答 2查看 14.5K关注 0票数 2

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

代码语言:javascript
运行
复制
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中手工生成一个发出请求的日志行)。

使用此正则表达式:

代码语言:javascript
运行
复制
(?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>.*)

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

代码语言:javascript
运行
复制
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

Regex可以在这里模拟https://regex101.com/r/xDfSqj/2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-11 14:58:04

试试这个解决方案:https://regex101.com/r/xDfSqj/4

你拥有的是一样的东西,除了:

代码语言:javascript
运行
复制
(?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周围添加了一个捕获组,并给出了?量词这也是添加到您的其他组,以防止贪婪捕获。

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

票数 8
EN

Stack Overflow用户

发布于 2020-11-12 07:20:45

我使用的正则表达式如下

代码语言:javascript
运行
复制
^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"(.+?)\"

您可以参考此链接来了解apache文件解析的功能,还有使用java进行apache文件解析的代码。希望你能找到好的解决问题的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40549123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档