我正在用 Python 实现一个自定义处理程序。当然,我需要重写emit(self, record)
才能做到这一点。一个例子:
from logging import Handler, LogRecord
class FooHandler(Handler):
def emit(self, record: LogRecord):
# handler logic
如您所见,每次我使用Logger
实例记录某些内容时,这将提供一个LogRecord
toemit
方法。
我从 CPython 源代码中看到了当前的实现LogRecord
,你也可以从这里看到它。
假设我有Logger
一个名为logger
. 稍后在代码中的某个地方,我执行以下操作:
# either this
logger.exception(Exception("foo"))
# it does not have to be an instance of Exception, it's for the sake of simplicity
# or this
logger.error("foo", exc_info=True)
# this also provides a stack trace on the console handler
由于@thebjorn 评论了回溯模块,我想我可以解决这个问题。但是我现在有三个问题:
- 如何从
LogRecord
实例中获取异常? - 如果我这样做
logger.error("message", exc_info=True)
,那么我不会传递任何异常实例。在这种情况下,我如何获得回溯,因为我没有任何异常实例?
提前致谢。
环境
- Python 3.5 及以上