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

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

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

文章目录

  • patterns解析日志流程
  • pattern构建方法

patterns解析日志流程

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

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

from loguru import logger

logger.add("my_debug.log", filter=lambda record: "DEBUG" in record['level'].name, level="TRACE",
           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})

运行后,得到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}

使用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("========================")

得到的结果:

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}
========================

pattern构建方法

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

我们看日志的内容是:

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

解析的pattern如下:

(?P

以第一个括号中的 (?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即可得到日志解析后的结果

你可能感兴趣的:(python,数据处理,程序优化,python,日志)