Python通过日志loguru记录程序中的中间变量,同时导出并分析

在程序运行的时候除了密密麻麻的日志外,这些关键函数的输入输出也十分重要,是回溯与数据核对的唯一

思路

  1. 使用loguru日志库,将不常见的【TRACE】级别作为保存中间数据的日志记录
  2. 以dict的方式保存日志,明确keyvalue保存
  3. 按照保存【TRACE】日志的格式format对应的pattern解析日志即可

pattern与日志的关系可以参考:python使用patterns解析loguru日志,从日志中提取结构化数据

示例代码

1. 源程序中这样保存中间结果

from loguru import logger

def use_func(num_1, num_2):
    result = num_1 * (num_2 + 2)
    logger.trace({ # 记录操作
        "函数名": "use_func",
        "value_1": num_1,
        "value_2": num_2,
        "result": result,
    })
    return result

def main():
    # 初始化日志
    logger.add("my_cal_record.log", filter=lambda record: "TRACE" in record['level'].name, level="TRACE",
               format="{time:YYYY-MM-DD HH:mm:ss.SSS} {level} {message}", enqueue=True, mode='w')
    # 这里我们执行一个循环操作
    for i in range(40):
        use_func(i, i * 2)


if __name__ == '__main__':
    main()

2. 解析中间结果并导出

得到日志结果my_cal_record.log

2022-12-08 16:30:11.727 TRACE {'函数名': 'use_func', 'value_1': 0, 'value_2': 0, 'result': 0}
2022-12-08 16:30:11.728 TRACE {'函数名': 'use_func', 'value_1': 1, 'value_2': 2, 'result': 4}
2022-12-08 16:30:11.728 TRACE {'函数名': 'use_func', 'value_1': 2, 'value_2': 4, 'result': 12}
2022-12-08 16:30:11.728 TRACE {'函数名': 'use_func', 'value_1': 3, 'value_2': 6, 'result': 24}
2022-12-08 16:30:11.728 TRACE {'函数名': 'use_func', 'value_1': 4, 'value_2': 8, 'result': 40}
2022-12-08 16:30:11.728 TRACE {'函数名': 'use_func', 'value_1': 5, 'value_2': 10, 'result': 60}
2022-12-08 16:30:11.728 TRACE {'函数名': 'use_func', 'value_1': 6, 'value_2': 12, 'result': 84}
......

用如下程序解析:

import pandas as pd
from loguru import logger
import dateutil
from dateutil.parser import parser

pattern = r"(?P<time>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}) (?P<level>TRACE) (?P<message>.*)"
caster_dict = dict(time=dateutil.parser.parse, level=str)

record_list = []
for log_groups in logger.parse("my_cal_record.log", pattern, cast=caster_dict):
    record_list.append(eval(log_groups['message']))
print(pd.DataFrame(record_list))

可以得到中间结果的记录:

         函数名  value_1  value_2  result
0   use_func        0        0       0
1   use_func        1        2       4
2   use_func        2        4      12
3   use_func        3        6      24
4   use_func        4        8      40
......
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值