使用 Python 和logging
库,您可以通过字典配置日志记录log_config
and
logging.config.dictConfig(log_config)
您可以通过以下方式登录logging.info
或创建一个记录器对象并使用它。拥有记录器对象有什么好处?
记录器根据其名称(使用“dotted.path”表示法)形成层次结构,根记录器位于顶部。创建记录器的规范方法是每个模块都有一个记录器,根据模块的名称命名__name__
属性,因此如果您有一个名为“mylib”的包,其中包含模块“utils”、“core”和“api”,那么您将拥有记录器“mylib”、“mylib.utils”、“mylib.core”和“mylib.api” ”,其中最后三个是“mylib”的子级(当然是根记录器的子级)。
由此,您可以仅配置根记录器,或者更具体地配置“mylib”记录器,甚至更具体地配置“mylib.api”(请注意,默认情况下记录器会传播到其父记录器)。如果你只使用logging
直接在所有包中,您将无法自定义每个包/模块的子记录器。
这里的要点是记录器调用应该与记录器配置分离 - 库代码定义和调用记录器,配置是使用库的应用程序的职责。显然,原因是库作者无法知道哪些应用程序将使用库代码,也不知道应用程序的作者希望如何配置他的记录器。该系统为应用程序的作者(或系统管理员或负责配置/部署应用程序的人员)提供了对记录器配置的全面、细粒度的控制。如果您的所有库代码仅使用根记录器,那么应用程序作者/管理员/用户不能对每个库/模块有不同的设置,并且他(她)会讨厌您如此侵入(我们不谈论他(她)如何如果你的库试图以任何方式真正搞乱记录器配置,你会感觉到)。
使长话短说:坚持理智的约定,使用logger = logging.getLogger(__name__)
在你的模块中,做not尝试在您的库代码中配置日志记录,您的库用户会很高兴。
编辑:正如您在评论中提到的,如果应用程序配置日志记录,则在模块级别声明记录器可能会导致问题after导入你的库and不设置disable_existing_loggers
为假。就我而言,应用程序的作者有责任在导入其他内容之前配置日志记录和/或设置disable_existing_loggers
为假。无论如何,首先配置日志记录是一个好主意,因为它将允许库代码在导入时记录最终问题......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)