gpt4 book ai didi

python - 如何捕获仅记录的错误?

转载 作者:行者123 更新时间:2023-12-03 08:19:04 25 4
gpt4 key购买 nike

主要问题

我正在使用一个依赖于日志记录而不是引发错误消息的模块。如何从 Python 中捕获记录的错误以对其使用react(无需剖析日志文件)?

最小的例子

假设 logging_module.py看起来像这样:

import logging
import random

def foo():
logger = logging.getLogger("quz")
if random.choice([True,False]):
logger.error("Doooom")

如果这个模块使用了异常,我可以这样做:
from logging_module import foo, Doooom

try:
foo()
except Doooom:
bar()

假设 logging_module是这样写的,我不能改变它,这是不可能的。我能做些什么呢?

到目前为止我考虑的

我通过了 logging documentation (虽然我没有阅读每一个字),但访问记录的唯一方法似乎是剖析实际日志,这对我来说似乎过于乏味(但我可能会误解这一点)。

最佳答案

您可以将过滤器添加到模块用于检查每个日志的记录器。 documentation关于使用过滤器来处理类似的事情有这样的说法:

Although filters are used primarily to filter records based on more sophisticated criteria than levels, they get to see every record which is processed by the handler or logger they’re attached to: this can be useful if you want to do things like counting how many records were processed by a particular logger or handler



下面的代码假定您使用的是 logging_module您在问题中显示并尝试模拟 try-except 的作用:也就是说,当在 foo 的调用中发生错误时函数 bar叫做。
import logging

from logging_module import foo

def bar():
print('error was logged')

def filt(r):
if r.levelno == logging.ERROR:
bar()
return True

logger = logging.getLogger('quz')
logger.addFilter(filt)

foo() # bar will be called if this logs an error

关于python - 如何捕获仅记录的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61814832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com