带有回调函数的 Python 记录器

guy*_*y.S 9 python logging python-2.7

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

xjc*_*jcl 11

子类化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')
Run Code Online (Sandbox Code Playgroud)
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">
Run Code Online (Sandbox Code Playgroud)

正在记录的特定消息可以作为record.msg(未格式化的字符串)或self.format(record)(格式化的字符串,如果您添加了时间戳或日志级别)进行访问

另外:如果您还重写了 的logging.Handler方法__init__,那么在子类中对其进行 super 调用很重要。


该模块的标准警告logging适用:

  • 默认日志级别是警告(因此调试/信息不会传递给发出)
  • 日志记录被传递给记录器的 所有处理程序