有没有办法用密文类实现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 回答
![?](http://img1.sycdn.imooc.com/5333a0490001f9ff02200220-100-100.jpg)
智慧大石
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)
添加回答
举报
0/150
提交
取消