【问题标题】:Python logger with a callback function带有回调函数的 Python 记录器
【发布时间】:2018-03-03 10:53:59
【问题描述】:

有没有办法配置 python 记录器来调用自定义函数并在它记录时将记录消息传递给它? 谢谢!

【问题讨论】:

  • 您应该查看子类并实现您自己的日志处理程序:docs.python.org/3.5/library/logging.html#handler-objects 并实现“emit”方法,您可以在其中对记录做任何您想做的事情。
  • 我试试,谢谢!
  • @guy.S 你有没有想过解决方案?
  • @gerrit 我现在添加了一个答案(适用于 Python 2 或 3)

标签: python python-2.7 logging


【解决方案1】:

继承logging.Handler并实现emit方法:

import logging

class MyHandler(logging.Handler):
    def emit(self, record):
        print('custom handler called with\n   ', record)

logger = logging.getLogger(__name__)
logger.addHandler(MyHandler())   # or: logger.handlers = [MyHandler()]
logger.warning('Log 1')
logger.warning('Log 2')
custom handler called with
    <LogRecord: __main__, 30, /home/jan/Dropbox/py/so_logging.py, 9, "Log 1">
custom handler called with
    <LogRecord: __main__, 30, /home/jan/Dropbox/py/so_logging.py, 10, "Log 2">

可以通过record.msg(未格式化的字符串)或self.format(record)(格式化的字符串,以防您添加时间戳或日志级别)访问正在记录的特定消息

另外:如果你还重写了logging.Handler__init__方法,那么在子类中对其进行超级调用很重要。


logging 模块的标准注意事项适用:

  • 默认日志级别为 WARNING(因此 DEBUG/INFO 不会传递给 emit)
  • 日志记录被传递给记录器的所有处理程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多