举个简单的例子:
import logging
class SmartLogRecord(logging.LogRecord):
""" Dummy LogRecord example """
def getMessage(self):
return self.msg % self.args
logging.setLogRecordFactory(SmartLogRecord)
var = 'SmartLogRecord'
logging.warning('I am a %s', var)
我可以在Python 3
上运行它并使用我的自定义LogRecord
类,但是Python 2
抛出一个错误:
以下是CPython 3.7中的
setLogRecordFactory()
及其所有荣耀:在
^{pr2}$Logger.makeRecord()
中调用此函数:相反,在Python 2中,这不是一件事:
^{3}$您可以做的基本上是替换
Logger
对象上的.makeRecord()
绑定方法。换句话说:这看起来像:
插图:
在本例中,您只是根据使用单个其他
MyLogRecord
类的特定需要对其进行裁剪。如果您真的愿意,您可以编写自己的setLogRecordFactory()
,然后在替换的.makeRecord()
方法中使用_logRecordFactory
,就像Python3所做的那样。在假设/备选方案(子类,不替换)
还有一个注释:这一切都假设您想要影响在别处创建的非“您自己的”实例。如果您只想影响您自己的代码定义的记录器,您可以只使用子类
Logger
,而不是完全替换属于logging.__init__
模块名称空间的Logger
类。在相关问题 更多 >
编程相关推荐