python-3.x - 我想在我的 pyhton 包中创建一个切换变量来启用/禁用整个包的日志记录
问题描述
我在我的 python 包中创建了一个日志记录模块,我正在使用日志记录模块来获取包中其他文件的控制台日志记录实例。现在我想创建一个切换变量,以便我可以禁用或启用整个包中的控制台日志记录。请建议我实施我所描述的方法。
我的示例包结构:
package/
|_ __init__.py
|_ logger.py
|_ moduleA.py
|_ moduleB.py
记录器.py
import logging
""" can I create any get/set kind of implementation here to control a toggle variable
based on which I decide the log level to be DEBUG or ERROR for the entire package """
def getLogger(name):
logger = logging.getLogger(name)
handler = logging.StreamHandler()
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger
我在其他模块中使用这个记录器,如下所示
log = logger.getLogger(__name__)
log.info("Hello!")
解决方案
实现您想要的一种常见方法是定义一个环境变量,例如 LOGLEVEL 并在调用setLevel()
或时使用它basicConfig()
。
例子:
import os
logger.setLevel(os.environ.get("LOGLEVEL", "DEBUG"))
旁注:通常不需要创建getLogger
自己的函数来允许所有模块共享根记录器。您可以通过在应用程序入口点初始化根记录器并在调用模块__name__
时使用变量来完成相同的操作。logging.getLogger()
这是关于这种方法的一个很好的解释。
推荐阅读
- graphql - Quarkus SmallRye Graphql-客户端变异查询
- heroku - 如何正确设置 DNS、Heroku 和 PointDNS
- php - 使用示例页面将自定义菜单项添加到 magento 2 管理侧边栏中的销售菜单选项卡
- azure-devops - 如何从嵌套对象中检索值?
- sql - 并发删除时的 SQL 死锁
- opengl - 如何从俯仰和偏航中找到二维角度?
- pine-script - 如何在pinescript中过滤掉重复的买入或卖出信号?
- typescript - 将 jquery unbind 转换为 vanillajs
- azure - 参数不可序列化 PowerShell
- python - 字典值列表与普通字典匹配;更新值