Nic*_*eet 3 python logging error-logging
出于某种原因, logging.basicConfig忽略了我给它的记录器级别.我的脚本中包含以下代码:
# main.py
print logging.getLogger().getEffectiveLevel()
print logger_level
logging.basicConfig(format=logger_format,
level=logger_level,
)
print logging.getLogger().getEffectiveLevel()
Run Code Online (Sandbox Code Playgroud)
输出是:
30
10
30
Run Code Online (Sandbox Code Playgroud)
因此,它实际上并没有设置记录器级别.但是,如果我在交互式解释器中执行此确切代码,我会得到以下输出:
30
10
10
Run Code Online (Sandbox Code Playgroud)
这意味着我正在设置日志记录级别.更令人困惑的是,这是最近发生的事情 - 我不知道我做了什么导致了这种行为.谁能提供一些见解?
编辑:如果遇到相关问题,我已尝试main.py从我的IDE(Sublime Text)和命令行运行,两者都具有相同的结果.我在一个基于conda的虚拟环境中工作,我尝试在环境中运行代码而不是(但只能从解释器 - 脚本无法处理一般环境),结果相同.
Das*_*ash 10
我(愚蠢地)遇到的一个问题是没有放在logging.basicConfig()主文件的顶部。
来自文档:
上述模块级便利函数(debug、info、warn、error、 fatal)委托给根记录器,调用 basicConfig() 以确保至少有一个处理程序可用。
如果根记录器已经配置了处理程序,则此函数(
basicConfig())force不执行任何操作,除非关键字参数设置为 True。
我调用了一个函数,该函数logging.BasicConfig()在调用脚本之前记录了一条消息,因此记录器的级别设置为默认值,而不是我想要的级别。
如果无法将记录器移到文件中的更高位置,您有两种选择:
Python 3.8 及以上版本:
logging.basicConfig(level=logging.INFO, force=True)
Run Code Online (Sandbox Code Playgroud)
Python 2.x 和 Python 3.x:
logging.getLogger().setLevel(logger_level)
Run Code Online (Sandbox Code Playgroud)
要查看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!")
Run Code Online (Sandbox Code Playgroud)
小智 9
如果根记录器已经为其配置了处理程序,则此函数不执行任何操作.
我的假设是你basicConfig()先调用,安装处理程序.
尝试直接在根记录器上设置loglevel.
logging.getLogger().setLevel(logger_level)
Run Code Online (Sandbox Code Playgroud)
如果要更改格式,则需要为处理程序提供新的格式化程序.假设已将处理程序添加到根记录器,以下操作可能会起作用.
logging.getLogger().handlers[0].setFormatter(logging.Formatter(logger_format))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |