猫史档案馆


【Python作品分享】nginx日志解析器

用户:tq_xyytq_xyy查看:0 回复:0 评论:0 创建时间:2020-10-18T12:48:50


【作品展示】

center_image

 

【作品介绍】

使用了stream.py, 链接https ://github.com/喵/Stream.py

 

【作品源代码】

import re

from stream import *

with open('nginx.log', 'r') as f:
    result = (f.stream()
              .map(lambda s: re.match(r'^(\d+.\d+.\d+.\d+) - - \[([\d\s\W\w]+)\] "(\w+?) ([\W\w]+?) ([\/\d\w\.]+?)" (\d+) (\d+) "([\w\W]+?)" "(.*?)"', s))
              .filter(None)
              .map(lambda m: m.groups())
              .map(lambda s: (s[0], re.match(r'(\d+)/([\W\w]+?)/(\d+):(\d+):(\d+):(\d+)\s([\+\d]+)', s[1]).groups(), *s[2:]))
              .map(lambda t: (t[0], {'year': t[1][2], 'month': t[1][1], 'day': t[1][0], 'time': t[1][3:-1], 'local': t[1][-1]}, *t[2:]))
              .map(lambda t: (t[0], t[1], {'method': t[2], 'path': t[3], 'protocol': t[4], 'code': t[5], 'length': t[6], 'referer': t[7]}, *t[8:]))
              .map(lambda t: (*t[:3], t[3] if len(t[3]) <= 42 else t[3][:42] + '...'))
              .collect(Collectors.mapping(lambda t: {'ip': t[0], 'time': t[1], 'request': t[2], 'http-user-agent': t[3]}, tuple))
              )

# for item in result:
#     print(item)
from json import dumps
print(dumps(result, indent=4))

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页