繁体   English   中英

如何获取从 logging.Handler 传递给日志调用的实际 object

[英]How to get the actual object passed to a logging call from a logging.Handler

假设我执行以下操作:

import logging

some_obj = MyObject()
logging.info(some_obj)

我有一个logging.Handler来处理这个消息:

class MyHandler(logging.Handler):

    def emit(self, record):
         # ...

有没有办法从我的处理程序中获取对some_obj的引用? logging.LogRecord的文档中,看来我只能通过record.getMessage()

我想这样做,以便我可以使用 object 的属性/方法来更干净地处理处理程序中的逻辑。 否则,我必须将我的处理程序逻辑基于字符串的内容,对于这个特定的用例,这最终会变得非常难看。

如果回答这个问题需要任何额外的上下文,请告诉我。 提前致谢。

some_obj将存储在LogRecordmsg属性中:这个简单的脚本

import logging

class MyClass(object):
    def __str__(self):
        return 'foo'

class MyHandler(logging.Handler):
    def emit(self, record):
        print('%r: %s' % (record.msg, record.msg))

logger = logging.getLogger()
logger.addHandler(MyHandler())
some_obj = MyClass()
logger.warning(some_obj)

运行时应该打印这样的内容:

<__main__.MyClass object at 0x0000000002934400>: foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM