为了账号安全,请及时绑定邮箱和手机立即绑定

Python 日志记录 - 在“记录”中覆盖 args/msg,以避免更改为可变对象数据

Python 日志记录 - 在“记录”中覆盖 args/msg,以避免更改为可变对象数据

哆啦的时光机 2022-08-25 16:29:24
有没有办法用密文类实现Python日志记录过滤器,这样任何用参数记录消息的调用(例如,LOGGER.debug('my message, %s, %s', data1, data2)都使用msg和args的副本而不是传递的可变对象?我们的实现意味着日志记录编校类最终会更改可变数据,然后与编校字符串一起存储/发送可变数据。我知道我们可以在对记录器的调用上执行此操作,例如 LOGGER.debug('my message, %s, %s', copy.deepcopy(data1), copy.deepcopy(data2)),但希望有一种方法可以覆盖日志记录设置定义中“记录”的筛选器函数 resposnbile?
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

您必须覆盖该函数。应用筛选器时,记录已创建。makeRecord


import logging

import copy


class CopyLogger(logging.Logger):

    def makeRecord(self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None):

        args = copy.deepcopy(args) # <- this is the line you care about

        return super().makeRecord(name, level, fn, lno, msg, args, exc_info, func, extra, sinfo)


logging.setLoggerClass(CopyLogger)

log = logging.getLogger('mylogger')


data1 = 'hello'

data2 = 'world'

log.warning('my message, %s, %s', data1, data2)


查看完整回答
反对 回复 2022-08-25
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信