log4j 在python日志记录中,在库中使用setLevel()来建立默认值是否是一种可接受的做法?

aamkag61  于 2022-11-06  发布在  Python
关注(0)|答案(1)|浏览(86)

在Python标准日志记录框架中,
在Python世界(什至在log4j世界)中,关于在您正在编写的库模块中执行setLevel(),是否有一种公认的智慧?在您的库中执行setLevel()可以让您建立一个默认值,而该默认值很容易被使用库模块的sw覆盖。
这是被接受的好做法还是被认为是坏做法?

"""library module"""
    import logging
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)  # Is this accepted as good practice or considered bad practice?
    ...
    logger.info('milepost')

也许(A),“是的,做吧!”这种做法很普遍--通过cd-ing到你的python树上,你自己看看,

egrep -r setLevel --exclude-dir=test --exclude-dir=tests *

或者(B),“不,这是错误的形式!”已经存在一个“默认值”......隐含地来自记录器层次结构中记录器的祖先。如果你再设置一个默认值,它会让你的库的用户感到困惑。另外,如果配置(从json或yaml文件,在主代码中)发生在库加载之前?那么稍后,您的库是第一次导入(加载)。也许库的默认值会覆盖已经通过配置文件配置的内容。这也会造成混乱!
或者(C),“是的,显性比隐性好!”
我希望这有一个明确的答案,但我还没有找到它。感谢任何指示!

1rhkuytd

1rhkuytd1#

我在下面阅读到的这段话暗示了不要在你正在创作的库中使用setLevel()。让它去吧,因为框架已经默认为WARNING了,对吗?
为库配置日志记录在开发使用日志记录的库时,应注意记录库如何使用日志记录--例如,所使用的记录程序的名称。还需要考虑其日志记录配置。如果使用的应用程序不使用日志记录,而库代码进行日志记录调用,那么(如前一节所述)严重级别为WARNING或更高级别的事件将输出到sys. stderr。这被视为最佳的默认行为。

相关问题