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压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
Python socket实现简单聊天室
Apr 01 Python
使用python爬取B站千万级数据
Jun 08 Python
对python:print打印时加u的含义详解
Dec 15 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
python添加菜单图文讲解
Jun 04 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python查看数据类型的方法
Oct 12 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
python中xlrd模块的使用详解
Feb 01 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图片验证码代码
2008/03/27 PHP
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
php创建无限级树型菜单
2015/11/05 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
解读! Python在人工智能中的作用
2017/11/14 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
Python tkinter label 更新方法
2018/10/11 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python numpy数组转置与轴变换
2019/11/15 Python
python实现拼接图片
2020/03/23 Python
Django权限控制的使用
2021/01/07 Python
python 实现的车牌识别项目
2021/01/25 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
总裁办公室主任职责
2014/01/02 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
遗愿清单观后感
2015/06/09 职场文书
PHP解决高并发问题
2021/04/01 PHP
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server