python - 如何设置导入模块的日志级别?

标签 python python-3.x logging python-import

用一个漂亮的记录器编写你的代码

import logging

def init_logging():
     logFormatter = logging.Formatter("[%(asctime)s] %(levelname)s::%(module)s::%(funcName)s() %(message)s")
     rootLogger = logging.getLogger()
     LOG_DIR = os.getcwd() + '/' + 'logs'
     if not os.path.exists(LOG_DIR):
          os.makedirs(LOG_DIR)
     fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2"))
     fileHandler.setFormatter(logFormatter)
     rootLogger.addHandler(fileHandler)
     rootLogger.setLevel(logging.DEBUG)
     consoleHandler = logging.StreamHandler()
     consoleHandler.setFormatter(logFormatter)
     rootLogger.addHandler(consoleHandler)
     return rootLogger

logger = init_logging()

按预期工作。使用 logger.debug("Hello! :)") 记录到文件和控制台。

在第二步中,您想要导入一个也使用日志记录模块进行日志记录的外部模块:

  1. 使用 pip3 install pymisp(或任何其他外部模块)安装它
  2. 使用 from pymisp import PyMISP(或任何其他外部模块)导入它
  3. 使用 self.pymisp = PyMISP(self.ds_model.api_url, self.ds_model.api_key, False, 'json')(或任何其他...)创建它的一个对象<

现在发生的是,导入模块的每个调试日志输出都被记录到日志文件和控制台。 现在的问题是,如何为导入的模块设置不同(更高)的日志级别。

最佳答案

正如 Meet Sinojaanishtain4 在评论中指出的,最好和最通用的方法是通过导入模块的名称检索记录器,如下所示:

import logging
import some_module_with_logging
logging.getLogger("some_module_with_logging").setLevel(logging.WARNING)

另一种选择(尽管如果上述通用方法有效则不推荐)是提取模块的记录器变量并根据您的需要对其进行自定义。大多数第三方模块将其存储在名为 logger_log 的模块级变量中。在你的情况下:

import logging    
import pymisp

pymisp.logger.setLevel(logging.INFO)
# code of module goes here

关于python - 如何设置导入模块的日志级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47265898/

相关文章:

Python禁用网络浏览器以使其失败

python - 在 SQLAlchemy 中使用 selectinload 加载相关对象时的排序顺序

python - 如何从 python 中的私有(private)存储库下载 GitHub 发布 Assets ?

python - 无法使用 "Requests-HTML"库获取交易价格

sql - Ruby on Rails 插件,用于在 SQL 查询的日志中显示行号

Truncate中的MySql通用查询日志文件名

python - 如何更改数组区域中的值?

python - 如何访问 Python 中二维列表中的列?

python - 使用CMD终端时Python无法显示希伯来语

logging - rsyslog v8 imfile 目录通配符