gpt4 book ai didi

Python 日志记录 - 全局应用格式化程序

转载 作者:太空宇宙 更新时间:2023-11-03 19:29:47 25 4
gpt4 key购买 nike

我使用短语!Silent来确定日志记录的保存位置。
如果日志记录消息在字符串开头包含 !Silent,则我的 Filter 子类会在 StreamHandler 中拒绝此消息。但消息会传递给其他处理程序,例如 FileHandlerMemoryHandler,并使用 !Silent 短语传递。

我创建了简单的 Formatter 子类来删除这个短语,包括字符串开头的白色字符,但我在将此格式化程序应用于处理程序时遇到了麻烦。

在我的应用程序的许多地方,我修改了根记录器处理程序,创建、添加和删除它。这些处理程序中的每一个都应该有我的 Formatter 子类,但是手动添加到每个处理程序中有点不舒服。

我正在寻找将 Formatter 类全局应用到根记录器的方法,或者覆盖根记录器 addHandler 方法以将过滤器添加到处理程序,然后再将其添加到根记录器。或者更简单的方法(如果存在)。

最佳答案

老实说,我不确定我完全理解你的问题,所以如果我的答案不是你想要的,请原谅我......但是,我会添加一个属性来代替对每个处理程序的输入应用过滤器您传递的 unicode(或字符串)对象。像这样的东西:

>>> class LogMsg(unicode):
... def __new__(cls, string_):
... if string_[:7] == '!Silent':
... cls.nolog = True
... return super(LogMsg, cls).__new__(cls, string_[7:])
... else:
... cls.nolog = False
... return super(LogMsg, cls).__new__(cls, string_)
...
>>> a = LogMsg('The hard drive is on fire!')
>>> a
u'The hard drive is on fire!'
>>> a.nolog
False
>>> b = LogMsg('!SilentMy feet stink! :(')
>>> b
u'My feet stink! :('
>>> b.nolog
True

通过这种方式,您可以简单地传递从不显示 !Silent 但具有隐藏标志 (nolog) 的“字符串”,仅在需要时才可以测试该标志.

HTH,/mac

关于Python 日志记录 - 全局应用格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497556/

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