首页 > 解决方案 > 在记录期间引发异常

问题描述

在 Python 3 中有没有办法在日志记录期间引发异常?我的意思是,我可以以某种方式配置标准logging模块以在完成时引发异常logging.error(e)吗?

标签: pythonexceptionlogging

解决方案


您通常不会通过调用来记录错误logging.error(e)。你通常打电话

logging.error('my message', exc_info=True)

或者

logging.error('my message', exc_info=e)  # Where e is the exception object

话虽如此,您可以扩展Logger该类来执行此操作:

from logging import Logger, setLoggerClass
from sys import exc_info

class ErrLogger(Logger):
    def error(msg, *args, **kwargs):
        super().error(msg, *args, **kwargs)
        err = kwargs.get('exc_info')
        if not isintsance(err, Exception):
            _, err, _ = exc_info()
            if err is None:
                err = SomeDefaultError(msg)  # You decide what to raise
        raise err

setLoggerClass现在使用函数注册新类:

setLoggerClass(ErrLogger)

使用自定义设置自定义记录器可能比覆盖仅在根记录器上运行error的模块级别更可靠。error

此处显示的方法将按以下顺序引发错误:

  1. 通过exc_info仅关键字参数传递的错误。
  2. 当前正在处理的错误。
  3. SomeDefaultError你指定的。

如果您想放弃此过程,请将之后的所有内容替换super().error(msg, *args, **kwargs)raise SomeDefaultError(...).


推荐阅读