【Python】logging.basicConfig无效说
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Python】logging.basicConfig无效说相关的知识,希望对你有一定的参考价值。
参考技术A问:下图中谁会被写入到文件“1.log”中呢?
答:都不会
下面来慢慢复原一下原因吧!
默认生成的root logger的level是logging.WARNING,低于该级别的就不输出。
级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG
debug : 打印全部的日志,详细的信息,通常只出现在诊断问题上
info : 打印info、warning、error、critical级别的日志,确认一切按预期运行
warning : 打印warning、error、critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来
error : 打印error、critical级别的日志,更严重的问题,软件没能执行一些功能
critical : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行
1.进入main.py,首先“import log”,运行到“logging.info(\'logger in 2\') ”。该步骤自动默认生成root logger,level等级是logging.WARNING,那么info低于该级别不输出且尚未设置basicConfig,也不会写入“1.log”
2.运行到“log.init_log()”,开始调用函数,运行“logging.basicConfig”进行日志信息配置,后运行“logging.info(\'logger in 1\')”。
重点来了: 根据basicConfig源码可以发现只有当“handlers”的长度为0时才会进行日志信息配置,否则跳过该配置步骤。那么在步骤1中root已经自动进行了日志信息配置,“handlers”的长度不为0,则步骤2中的“logging.basicConfig”并没有达到日志信息配置的作用。进而,按照原先的日志信息配置设置: 不会生成“1.log”文件,不会打印logging.WARNING等级一下的消息 。
根据上面的测试说明,可以得出一点:如果希望basicConfig设置有效,那么必须在log之前进行设置,在root logger之后就无法再通过basicConfig更改配置(如果强行将handlers设为空理论上时可以的,本人暂未测试)。
但是,针对这个情况python做了更改,在python3.8及之后在basicConfig中新增了force参数,当“force=True”时可以强制进行日志信息重新设置。
以上是关于【Python】logging.basicConfig无效说的主要内容,如果未能解决你的问题,请参考以下文章