在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),“是的,显性比隐性好!”
我希望这有一个明确的答案,但我还没有找到它。感谢任何指示!
1条答案
按热度按时间1rhkuytd1#
我在下面阅读到的这段话暗示了不要在你正在创作的库中使用setLevel()。让它去吧,因为框架已经默认为WARNING了,对吗?
为库配置日志记录在开发使用日志记录的库时,应注意记录库如何使用日志记录--例如,所使用的记录程序的名称。还需要考虑其日志记录配置。如果使用的应用程序不使用日志记录,而库代码进行日志记录调用,那么(如前一节所述)严重级别为WARNING或更高级别的事件将输出到sys. stderr。这被视为最佳的默认行为。