博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日志分析代码实现(正则表达式)
阅读量:5780 次
发布时间:2019-06-18

本文共 1023 字,大约阅读时间需要 3 分钟。

日志分析代码实现(正则表达式)

  • 思路

        使用正则表达式处理:        使用正则提取对应内容        每段数据转换为对应格式        精简代码,异常处理,代码效率检查

import datetime

import re


logline = '''183.60.212.153 - - [19/Feb/2013:10:23:29 +0800] \
"GET /o2o/media.html?menu=3 HTTP/1.1" 200 16691 "-" \
"Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)"'''

# 使用正则表达式的命名分组,可以直接根据分组名和对应匹配字段
# 进行对应生成新字典

def log_clean(line:str):
    pattern = '''(?P<remote>([\d\.]{7,})) - - \[(?P<time>[^\[\]]+)\] \"(?P<request>[^"]+)\" (?P<status>\d{3}) (?P<size>\d+) \"-\" \"(?P<useragent>[^"]+)\"\s?'''
    regex = re.compile(pattern)
    matcher = regex.fullmatch(line)
    if matcher:  # None时,异常处理
        return { k:operations.get(k,lambda x:x)(v) for k,v in matcher.groupdict().items()}

operations = {


    'time':lambda time: datetime.datetime.strptime(time, '%d/%b/%Y:%H:%M:%S %z'),
    'request': lambda request: dict(zip(('method','url','protocol'),request.split())),
    'status': int,
    'size': int
}

print(log_clean(logline))            本文转自 撒旦搞时间 51CTO博客,原文链接:http://blog.51cto.com/12074120/1980428,如需转载请自行联系原作者

你可能感兴趣的文章
flask的文件上传和下载
查看>>
如何查看java class文件的jdk版本
查看>>
ImportError: cannot import name UnrewindableBodyError
查看>>
翻翻git之---有用的欢迎页开源库 AppIntro
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>
C++ 代码风格准则:POD
查看>>
PHP-Windows下搭建PHP-MSF环境【原创】
查看>>
linux-友好显示文件大小
查看>>
emplace_back() 和 push_back 的区别(转)
查看>>
【转】【WPF】WPF中MeasureOverride ArrangeOverride 的理解
查看>>
ASP、Access、80040e14、保留关键字、INSERT INTO 语句的语法错误
查看>>
【转】二叉树的非递归遍历
查看>>
NYOJ283对称排序
查看>>
接连遇到大牛
查看>>
[Cocos2d-x For WP8]矩形碰撞检测
查看>>
自己写spring boot starter
查看>>
花钱删不完负面消息
查看>>
JBPM之JPdl小叙
查看>>
(step6.1.5)hdu 1233(还是畅通工程——最小生成树)
查看>>