gpt4 book ai didi

python - 如何防止库修改根记录器?

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

一些库,例如oslo_log modify the root logger ,这完全消除了我自己的日志配置。

为了防止这种情况发生,我对标准日志库进行了猴子修补,如下所示:

def hackyCustomGetLogger(name=None, true_behavior=False):
"""
a replacement for the logging.getLogger function that returns a fake
root logger if called with name=None and true_behavior=False.

this is to prevent third party libraries from altering the root logger
configuration.
"""
if name:
return logging.Logger.manager.getLogger(name)
else:
if true_behavior:
return logging.root
# if no name is specified, and `true_behavior` is not forced to True,
# we return a fake logger
warning = ('you called an altered version of logging.getLogger, '
'that returns a fake root logger. see {} ({})')
logging.root.warning(warning.format(__name__, __file__))
return logging.RootLogger(logging.WARNING)

logging.getLogger = hackyCustomGetLogger

它确实有效,但是呃……猴子修补 python 标准库听起来像是一个非常坏主意。有没有更好的方法来实现这一目标?

最佳答案

库不应尝试修改日志记录设置。我自己认为这是一个错误。

我注意到,您引用的示例仅在尚未配置 root_logger 的情况下进行设置:

# Sometimes logging occurs before logging is ready (e.g., oslo_config).
# To avoid "No handlers could be found," temporarily log to sys.stderr.
root_logger = logging.getLogger(None)
if not root_logger.handlers:
root_logger.addHandler(logging.StreamHandler())

那么也许更好的解决方法是确保已经定义了记录器?

关于python - 如何防止库修改根记录器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787173/

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