gpt4 book ai didi

python - 在 Python 中拦截所有日志记录

转载 作者:行者123 更新时间:2023-11-28 19:10:54 25 4
gpt4 key购买 nike

我是 Python 新手,对 Python 日志记录还比较陌生。

我的情况是,我有一个系统,我需要在其中跟踪整个过程中的数据。所以我决定使用 Python 的日志系统本身来跟踪信息。

最初我创建了一个新的日志记录处理程序,它在 emit 函数中将记录器发送到另一台服务器,前提是记录器在其 extra 属性中有我用来跟踪的一些变量。

到目前为止一切顺利,在所有日志中(从调试到关键)我都可以跟踪数据。我的问题是,如果有人将 LogLevel 设置为 critical 而我正在使用 LogLevel info 跟踪数据,我不会得到跟踪,因为不会处理日志。

我想到了两种解决方案。首先,创建自定义 LogLevel 以用于跟踪,我认为这不是正确的选择。第二个,我认为是正确的,是拦截所有日志,并检查其中是否有额外的变量。如果日志有,无论日志级别如何,我都会以任何方式将日志发送到服务器。

由于我是 Python 新手,所以我无法理解日志系统是如何工作的。我的处理程序中是否需要其他功能?我需要创建自定义 LogRecord 吗?

class RQHandler(logging.Handler):
def __init__(
self, formatter=JSONFormatter(), level=logging.NOTSET,
connection_pool=None
):
# run the regular Handler __init__
logging.Handler.__init__(self, level)
self.formatter = formatter

def emit(self, record):
# Send to the other
...

最佳答案

logging模块中,HandlerFilterer的子类,它有方法filter(self, record)

看起来一个简单的解决方案可能是覆盖 RQHandler 中的 filter 方法。查看原始的 Filterer 代码以了解它首先在做什么,但您应该能够将其覆盖为 return True 以强制 LogRecord总是被 emitted。

关于python - 在 Python 中拦截所有日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40360102/

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