python logging设置level失败的解决方法


Posted in Python onFebruary 19, 2020

一、问题描述

在用python开发时经常用到logging这个包,根据官方示例,如果要指定日志级别可以写成如下的方式。

import logging
logging.basicConfig(level=logging.INFO)

但是在实际应用中,这种方式有时候会设置不成功,导致无法打印出info及以下级别的日志。一种最直接的解决方式是将这两行代码提到文件的最前面,保证在所有其他import语句之前。

示例如下。

# encoding=utf8
import logging
logging.basicConfig(level=logging.INFO)
# other import
import ...
# your code
if __name__ == '__main__':
  pass

二、问题解释

basicConfig函数的部分源码如下:

def basicConfig(**kwargs):
  _acquireLock()
  try:
    if len(root.handlers) == 0:
      filename = kwargs.get("filename")
      if filename:
        mode = kwargs.get("filemode", 'a')
        hdlr = FileHandler(filename, mode)
      else:
        stream = kwargs.get("stream")
        hdlr = StreamHandler(stream)
      fs = kwargs.get("format", BASIC_FORMAT)
      dfs = kwargs.get("datefmt", None)
      fmt = Formatter(fs, dfs)
      hdlr.setFormatter(fmt)
      root.addHandler(hdlr)
      level = kwargs.get("level")
      if level is not None:
        root.setLevel(level)
  finally:
    _releaseLock()

在代码里首先会判断一下root.handlers长度是否为0,如果不为0才新生成一个hander,并设置level。

如果在代码里调用这个函数之前,import了其他包,并且这些包里面也引用了logging这个包,就可能导致设置不成功。

logging包的默认日志级别为logging.UNSET,在这个日志级别只会打印warn及以上级别的日志。

以上这篇python logging设置level失败的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用python代码做configure文件
Jul 20 Python
用Python中的字典来处理索引统计的方法
May 05 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python实现的双色球生成功能示例
Dec 18 Python
浅谈Python的list中的选取范围
Nov 12 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
PyQt5实现画布小程序
May 30 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 #Python
python内打印变量之%和f的实例
Feb 19 #Python
Python 实现日志同时输出到屏幕和文件
Feb 19 #Python
python 控制台单行刷新,多行刷新实例
Feb 19 #Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 #Python
python 解决tqdm模块不能单行显示的问题
Feb 19 #Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 #Python
You might like
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
php中yii框架实例用法
2020/12/22 PHP
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python使用三种方法实现PCA算法
2017/12/12 Python
selenium+python实现自动登录脚本
2018/04/22 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
使用Python实现分别输出每个数组
2019/12/06 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
《莫高窟》教学反思
2014/02/25 职场文书
大学生村官承诺书
2014/03/28 职场文书
新手上路标语
2014/06/20 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android