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中self原理实例分析
Apr 30 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
python模块之re正则表达式详解
Feb 03 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
Python实现的求解最大公约数算法示例
May 03 Python
python实现爬取图书封面
Jul 05 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
python3中布局背景颜色代码分析
Dec 01 Python
python之django路由和视图案例教程
Jul 26 Python
python_tkinter弹出对话框创建
Mar 20 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 iconv() : Detected an illegal character in input string
2010/12/05 PHP
php缓存技术详细总结
2013/08/07 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python下载网络小说实例代码
2018/02/03 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python如何删除文件、目录
2020/06/23 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
为什么会有内存对齐
2016/10/10 面试题
运动会邀请函范文
2014/02/06 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
谢师宴学生致辞
2015/07/27 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python