Python 日志记录不会使用 basicConfig 设置日志记录级别
Python logging won't set a logging level using basicConfig
出于某种原因,logging.basicConfig
忽略了我提供的记录器级别。以下代码在我的一个脚本中:
# main.py
print logging.getLogger().getEffectiveLevel()
print logger_level
logging.basicConfig(format=logger_format,
level=logger_level,
)
print logging.getLogger().getEffectiveLevel()
输出为:
30
10
30
所以,它实际上并没有设置记录器级别。但是,如果我在交互式解释器中执行这段代码,我会得到以下输出:
30
10
10
这意味着我设置的日志记录级别很好。更令人困惑的是,这是最近发生的事情——我不知道我做了什么导致了这种行为。谁能提供一些见解?
编辑:如果有相关问题,我已经从 IDE(Sublime Text)以及命令行尝试了 运行 main.py
,两者都使用同样的结果。我在基于 conda 的虚拟环境中工作,我已经尝试 运行 环境中的代码,而不是(但仅来自解释器 - 脚本无法处理一般环境)结果。
This function does nothing if the root logger already has handlers configured for it.
我的假设是您之前调用了 basicConfig()
,它安装了处理程序。
尝试直接在根记录器上设置日志级别。
logging.getLogger().setLevel(logger_level)
如果您想更改格式,则需要为处理程序提供一个新的格式化程序。假设已将处理程序添加到根记录器,以下 可能 有效。
logging.getLogger().handlers[0].setFormatter(logging.Formatter(logger_format))
我(愚蠢地)遇到的一个问题是没有将 logging.basicConfig()
放在主文件的顶部。
来自the docs:
The above module-level convenience functions (debug, info, warn, error, fatal), which delegate to the root logger, call basicConfig() to ensure that at least one handler is available.
This function (basicConfig()
) does nothing if the root logger already has handlers configured, unless the keyword argument force
is set to True.
我在脚本中调用 logging.BasicConfig()
之前调用了一个记录消息的函数,因此记录器的级别设置为默认值,而不是我想要的级别。
如果无法将记录器移到文件中更高的位置,您有两个选择:
Python 3.8及以上:
logging.basicConfig(level=logging.INFO, force=True)
Python 2.x 和 Python 3.x:
logging.getLogger().setLevel(logger_level)
要查看 basicConfig()
覆盖操作,试试这个:
import logging
logging.info("Can't see me!")
logging.warn("Peekabo")
logging.basicConfig(level=logging.INFO)
logging.info("Hidden again!")
logging.basicConfig(level=logging.INFO, force=True)
logging.info("You found me!")
出于某种原因,logging.basicConfig
忽略了我提供的记录器级别。以下代码在我的一个脚本中:
# main.py
print logging.getLogger().getEffectiveLevel()
print logger_level
logging.basicConfig(format=logger_format,
level=logger_level,
)
print logging.getLogger().getEffectiveLevel()
输出为:
30
10
30
所以,它实际上并没有设置记录器级别。但是,如果我在交互式解释器中执行这段代码,我会得到以下输出:
30
10
10
这意味着我设置的日志记录级别很好。更令人困惑的是,这是最近发生的事情——我不知道我做了什么导致了这种行为。谁能提供一些见解?
编辑:如果有相关问题,我已经从 IDE(Sublime Text)以及命令行尝试了 运行 main.py
,两者都使用同样的结果。我在基于 conda 的虚拟环境中工作,我已经尝试 运行 环境中的代码,而不是(但仅来自解释器 - 脚本无法处理一般环境)结果。
This function does nothing if the root logger already has handlers configured for it.
我的假设是您之前调用了 basicConfig()
,它安装了处理程序。
尝试直接在根记录器上设置日志级别。
logging.getLogger().setLevel(logger_level)
如果您想更改格式,则需要为处理程序提供一个新的格式化程序。假设已将处理程序添加到根记录器,以下 可能 有效。
logging.getLogger().handlers[0].setFormatter(logging.Formatter(logger_format))
我(愚蠢地)遇到的一个问题是没有将 logging.basicConfig()
放在主文件的顶部。
来自the docs:
The above module-level convenience functions (debug, info, warn, error, fatal), which delegate to the root logger, call basicConfig() to ensure that at least one handler is available.
This function (
basicConfig()
) does nothing if the root logger already has handlers configured, unless the keyword argumentforce
is set to True.
我在脚本中调用 logging.BasicConfig()
之前调用了一个记录消息的函数,因此记录器的级别设置为默认值,而不是我想要的级别。
如果无法将记录器移到文件中更高的位置,您有两个选择:
Python 3.8及以上:
logging.basicConfig(level=logging.INFO, force=True)
Python 2.x 和 Python 3.x:
logging.getLogger().setLevel(logger_level)
要查看 basicConfig()
覆盖操作,试试这个:
import logging
logging.info("Can't see me!")
logging.warn("Peekabo")
logging.basicConfig(level=logging.INFO)
logging.info("Hidden again!")
logging.basicConfig(level=logging.INFO, force=True)
logging.info("You found me!")