• python使用patterns解析loguru日志,从日志中提取结构化数据


    loguru 的 github页面是:https://github.com/Delgan/loguru

    log pattern可以认为是对日志的分组,一种日志格式format,对应一种patterns,可以快速的对日志进行筛选并提取,是非常高效的日志分析的方法(或思路)

    patterns解析日志流程

    比如使用loguru打印一些代码:

    这段代码的含义是:使用文件my_debug.log,保存DEBUG级别的数据

    from loguru import logger
    
    logger.add("my_debug.log", filter=lambda record: "DEBUG" in record['level'].name, level="DEBUG",
               format="{time:YYYY-MM-DD HH:mm:ss.SSS} {level} {message}", enqueue=True)
    logger.debug({"info": "debug", "name": "小明", "age": 22})
    logger.debug({"info": "debug", "name": "小a", "age": 22})
    logger.debug({"info": "debug", "name": "小b", "age": 22})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行后,得到my_debug.log文件的内容是:

    2022-11-25 09:45:13.018 DEBUG {'info': 'debug', 'name': '小明', 'age': 22}
    2022-11-25 09:45:13.018 DEBUG {'info': 'debug', 'name': '小a', 'age': 22}
    2022-11-25 09:45:13.019 DEBUG {'info': 'debug', 'name': '小b', 'age': 22}
    
    • 1
    • 2
    • 3

    使用parse解析日志:

    from loguru import logger
    import dateutil
    from dateutil.parser import parser
    
    pattern = r"(?P
    caster_dict = dict(time=dateutil.parser.parse, level=str)  # Transform matching groups
    
    for log_groups in logger.parse("my_debug.log", pattern, cast=caster_dict):
        for k, v in log_groups.items():
            print(k, v)
        print("========================")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    得到的结果:

    time 2022-11-25 09:45:13.018000
    level DEBUG
    message {'info': 'debug', 'name': '小明', 'age': 22}
    ========================
    time 2022-11-25 09:45:13.018000
    level DEBUG
    message {'info': 'debug', 'name': '小a', 'age': 22}
    ========================
    time 2022-11-25 09:45:13.019000
    level DEBUG
    message {'info': 'debug', 'name': '小b', 'age': 22}
    ========================
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    pattern构建方法

    pattern是日志解析的核心,当然我们可以直接构建正则表达式,来匹配对应的数据,但是使用模版与pattern是一对,使用一个日志模板,就可以匹配pattern进行提取

    我们看日志的内容是:

    2022-11-25 09:45:13.018 DEBUG {'info': 'debug', 'name': '小明', 'age': 22}
    
    • 1

    解析的pattern如下:

    (?P
    • 1

    以第一个括号中的 (?P为例:

    1. 其中(?P表示解析后的key是time;同理换成(?P)表示解析后的key是ahahahahaha;
    2. 后面的\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}是匹配日期的正则表达式;最后 message的.*表示后面的内容都是message。

    根据日志的模版format,构造对应的pattern即可得到日志解析后的结果

  • 相关阅读:
    day02-Gateway(网关)
    小孢子的神奇之旅-如何阅读MindSpore报错信息(2)
    <5>【深度学习 × PyTorch】“自动微分”机制 | 通俗理解 pytorch中的autograd、backward | 实例详解tensors、grad_tensors
    古典密码小记
    Google Earth Engine ——利用降水数据来实现
    TCP通信-快速入门
    CSDN每日一练 |『阿波罗的魔力宝石』『贝博士外星信号统计』『字符串子串的增删』2023-09-14
    JS知识点,持续更新
    90%的测试人员知识盲区:移动端专项测试到底怎么做?
    使用sass开发web-components组件
  • 原文地址:https://blog.csdn.net/weixin_35757704/article/details/128032142