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核心对象类型字符串
Feb 11 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
使用python实现ftp的文件读写方法
Jul 02 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
python设置随机种子实例讲解
Sep 12 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python使用进程Process模块管理资源
Mar 05 Python
如何实现更换Jupyter Notebook内核Python版本
May 18 Python
学习python需要有编程基础吗
Jun 02 Python
运行python提示no module named sklearn的解决方法
Nov 29 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
Smarty变量用法详解
2016/05/11 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
《梅花魂》教学反思
2014/04/30 职场文书
技术员个人工作总结
2015/03/03 职场文书
学生通报表扬范文
2015/05/04 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA