Python通过日志loguru记录程序中的中间变量,同时导出并分析
迪丽瓦拉
2024-03-26 16:54:32
0

文章目录

  • 思路
  • 示例代码
    • 1. 源程序中这样保存中间结果
    • 2. 解析中间结果并导出

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

思路

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

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

示例代码

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

from loguru import loggerdef 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 resultdef 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 parserpattern = r"(?P

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

         函数名  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
......

相关内容