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多进程编程
Jun 12 Python
python3中int(整型)的使用教程
Mar 23 Python
对numpy中轴与维度的理解
Apr 18 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
pymysql模块的操作实例
Dec 17 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
python 模拟登陆github的示例
Dec 04 Python
python实现简易名片管理系统
Apr 11 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打包网站并在线压缩为zip
2016/02/13 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
Vue 实现登录界面验证码功能
2020/01/03 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
django迁移文件migrations的实现
2020/03/31 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
2020/05/11 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
Django URL参数Template反向解析
2020/11/24 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
中专生自荐信
2013/10/12 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
公司企业表扬信
2014/01/11 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
教师演讲稿开场白
2014/08/25 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
辞职申请书范本
2019/05/20 职场文书