Python日志覆盖配置级别

Python日志覆盖配置级别,python,json,logging,config,log-level,Python,Json,Logging,Config,Log Level,我正在为记录器使用以下dictConfig。但是,我无法在运行时修改日志记录级别 #log_config.json的内容 然后,我获取记录器并使用以下方法设置级别: with open('/path/to/log_config.json', 'r') as fd: cfg = json.load(fd) logging.config.dictConfig(cfg) logger = logging.getLogger(__name__) logger.setLevel(10) 但是,

我正在为记录器使用以下dictConfig。但是,我无法在运行时修改日志记录级别

#log_config.json的内容

然后,我获取记录器并使用以下方法设置级别:

with open('/path/to/log_config.json', 'r') as fd:
    cfg = json.load(fd)

logging.config.dictConfig(cfg)
logger = logging.getLogger(__name__)
logger.setLevel(10)
但是,由于记录器是使用dictConfig创建的,因此我无法覆盖这些级别。我想构建一个UI工具,它有一个选项菜单,可以在运行时调整日志记录级别,而无需破解打开的代码或json文件来进行调整。我可以调整水平更高,但由于某些原因,它不会让水平下降


我想做的是在配置中将info_文件和控制台处理程序设置为info(20),然后在运行时可以选择将它们更改为DEBUG(10)。有什么想法吗?

我有一个类似的问题,刚刚解决了

在我的例子中,我只想更改“console”处理程序的级别,但您可以轻松地将其扩展到所有处理程序并进行尝试:

logger = logging.getLogger(__name__)
for handler in logger.handlers:
    if handler.get_name() == 'console':
        handler.setLevel(logging.DEBUG)

(注意,我复制了您的
\uuu name\uuuu
,但对我来说,我使用了一个实际的字符串来命名记录器-以防万一)

我正在寻找dict配置,我发现了您的问题。我遵循了你的确切代码,也无法更改我发现的日志级别。使用@Tjorriemorrie的第三个解决方案而不是
\uuuu name\uuuuuuuuuu
,返回了正确的
logger.handlers
。我和@Starman的组合。。。现在我可以随时随地更改日志记录级别

logger = logging.getLogger()
for handler in logger.handlers:
    if handler.get_name() == 'console':
        handler.setLevel(logging.DEBUG)

PS:谢谢你的代码片段!这对我帮助很大。

不适合我,当我看到logger.handlers时,我得到了[]。这里也一样。我以与问题作者相同的方式配置并初始化了Logger实例,@Starman提供的应用代码段,我得到了类似的输出-看起来Logger的所有属性都丢失了(handlers=[],level=0等)。也许这是图书馆的问题?另一方面,logger正确地执行其在初始配置中描述的任务(例如,写入声明的文件等),因此我有点困惑……我也有同样的问题,这些问题最终为我澄清了,我没有正确设置根logger,@MarekBocianNice work\N因此,通过删除OP指定的
\u name
,它只返回正确的记录器?这对OP有用吗?正如我在回答中提到的,我自己在那里没有使用
\u name
,但我想OP似乎想要一个以他的文件名命名的记录器。
logger = logging.getLogger()
for handler in logger.handlers:
    if handler.get_name() == 'console':
        handler.setLevel(logging.DEBUG)