python logging日志模块的详解


Posted in Python onOctober 29, 2017

python logging日志模块的详解

日志级别

日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL。
DEBUG:详细的信息,通常只出现在诊断问题上
INFO:确认一切按预期运行
WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。
ERROR:更严重的问题,软件没能执行一些功能
CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行
这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。默认的是WARNING,当在WARNING或之上时才被跟踪。

日志格式说明

logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
我在工作中给的常用格式在前面已经看到了。就是:
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
这个格式可以输出日志的打印时间,是哪个模块输出的,输出的日志级别是什么,以及输入的日志内容。

日志输出

有两种方式记录跟踪,一种输出控制台,另一种是记录到文件中,如日志文件。

将日志输出到控制台

在a.py写入以下信息

import logging 

logging.basicConfig(level=logging.WARNING, 
          format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') 
# use logging 
logging.info('this is a loggging info message') 
logging.debug('this is a loggging debug message') 
logging.warning('this is loggging a warning message') 
logging.error('this is an loggging error message') 
logging.critical('this is a loggging critical message') 
执行上面的代码将在Console中输出下面信息:
2017-03-16 16:58:11,266 - a.py[line:10] - WARNING: this is loggging a warning message
2017-03-16 16:58:11,266 - a.py[line:11] - ERROR: this is an loggging error message
2017-03-16 16:58:11,266 - a.py[line:12] - CRITICAL: this is a loggging critical message

【解析】

通过logging.basicConfig函数对日志的输出格式及方式做相关配置,上面代码设置日志的输出等级是WARNING级别,意思是WARNING级别以上的日志才会输出。另外还制定了日志输出的格式。

将日志输出到文件

在logging.basicConfig函数中设置好输出文件的文件名和写文件的模式。

import logging 

logging.basicConfig(level=logging.WARNING, 
          filename='./log/log.txt', 
          filemode='w', 
          format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') 
# use logging 
logging.info('this is a loggging info message') 
logging.debug('this is a loggging debug message') 
logging.warning('this is loggging a warning message') 
logging.error('this is an loggging error message') 
logging.critical('this is a loggging critical message') 
运行之后,打开该文件./log/log.txt,效果如下:
2015-05-21 17:30:20,282 - log.py[line:12] - WARNING: this is loggging a warning message
2015-05-21 17:30:20,282 - log.py[line:13] - ERROR: this is an loggging error message
2015-05-21 17:30:20,282 - log.py[line:14] - CRITICAL: this is a loggging critical message

通过配置文件设置日志模式

https://docs.python.org/2/library/logging.config.html#logging.config.dictConfig

dictconfig比fileconfig要更新

#config.conf
###############################################
[loggers]
keys=root,example01,example02

[logger_root]
level=DEBUG
handlers=hand01,hand02

[logger_example01]
handlers=hand01,hand02
qualname=example01
propagate=0

[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0

###############################################
[handlers]
keys=hand01,hand02,hand03

[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)

[handler_hand02]
class=FileHandler
level=NOTSET
formatter=form01
args=('myapp.log', 'a')

[handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form02
args=('myapp.log', 'a', 10*1024*1024, 5)

###############################################
[formatters]
keys=form01,form02
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=

主函数

import logging
import logging.config

logging.config.fileConfig("/home/razerware/configscript/config.conf")
logger = logging.getLogger("example01")
logger2 = logging.getLogger("example02")
logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

logger2.debug('This is debug message')
logger2.info('This is info message')
logger2.warning('This is warning message')

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
初步理解Python进程的信号通讯
Apr 09 Python
Django imgareaselect手动剪切头像实现方法
May 26 Python
Python实现的用户登录系统功能示例
Feb 05 Python
python 编写简单网页服务器的实例
Jun 01 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
python实现从wind导入数据
Dec 03 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
Matplotlib animation模块实现动态图
Feb 25 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 #Python
Python批量更改文件名的实现方法
Oct 29 #Python
python生成二维码的实例详解
Oct 29 #Python
python 读写中文json的实例详解
Oct 29 #Python
Python3 处理JSON的实例详解
Oct 29 #Python
深入理解Python中的*重复运算符
Oct 28 #Python
13个最常用的Python深度学习库介绍
Oct 28 #Python
You might like
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
Javascript的一种模块模式
2008/03/22 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
js实现蒙版效果
2020/01/11 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Python中关键字is与==的区别简述
2014/07/31 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
linux系统都有哪些运行级别
2012/04/15 面试题
自我鉴定范文
2013/11/10 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书
给面试官的感谢信
2014/02/01 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
个人党性分析总结
2015/03/05 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
行政复议答复书
2015/07/01 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫