使用Python和logging
库,您可以通过dict log_config
和
logging.config.dictConfig(log_config)
您可以通过logging.info
登录或创建记录器对象并使用它。拥有记录器对象有什么好处?
答案 0 :(得分:3)
记录器根据其名称形成层次结构(使用" dotted.path"表示法),根记录器位于顶部。创建记录器的规范方法是每个模块有一个,从模块的__name__
属性命名,所以如果你有一个名为" mylib"使用模块" utils"," core"和" api",你有记录器" mylib"," mylib.utils"," mylib.core"和" mylib.api",其中最后三个是" mylib"的孩子。 (当然是根记录器的孩子)。
从这里你可以只配置根记录器,或者更具体地配置" mylib"记录器,甚至更具体地配置ie" mylib.api" (请注意,默认情况下,记录器会传播到其父级)。如果您只在所有包中直接使用logging
,则无法为每个包/模块自定义子记录器。
这里的重点是记录器调用应该与记录器配置分离 - 库代码定义和调用记录器,配置是使用库的应用程序的职责。显然,原因是图书馆作者不知道哪些应用程序将使用库代码,也不知道应用程序的作者如何配置他的记录器。该系统为应用程序的作者(或系统管理员或负责配置/部署应用程序的任何人)提供对记录程序配置的完整,细粒度控制。如果您的所有库代码只使用根记录器,则应用程序作者/ admin / user不能为每个库/模块设置不同的设置,并且他会讨厌您是如此干扰(并且不要谈论如何(s)他会觉得你的图书馆是否试图以任何方式弄乱记录器配置。
简而言之:坚持理智的惯例,在模块中使用logger = logging.getLogger(__name__)
,不尝试配置库代码中的日志记录,您的图书馆用户将很高兴。
disable_existing_loggers
设置为False。首先配置日志记录是恕我直言,因为它允许库代码在导入时记录最终的问题...