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 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
Python的time模块中的常用方法整理
Jun 18 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
Python快速查找list中相同部分的方法
Jun 27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
python装饰器使用实例详解
Dec 14 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
浅谈Python 中的复数问题
May 19 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中的一些数组排序方法分享
2012/07/20 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php之XML转数组函数的详解
2013/06/07 PHP
深入理解PHP中的global
2014/08/19 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
Bootstrap表单布局
2016/07/19 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python实现两个文件合并功能
2018/04/01 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
Python通过Pillow实现图片对比
2020/04/29 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
Django REST 异常处理详解
2020/07/15 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
外贸英语毕业生自荐信
2013/11/14 职场文书
社会学专业求职信
2014/02/24 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
司法局火灾防控方案
2014/06/05 职场文书