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 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python获取单个程序CPU使用情况趋势图
Mar 10 Python
Python过滤列表用法实例分析
Apr 29 Python
python数据结构之列表和元组的详解
Sep 23 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
Python的iOS自动化打包实例代码
Nov 22 Python
在matplotlib的图中设置中文标签的方法
Dec 13 Python
python中实现控制小数点位数的方法
Jan 24 Python
Python如何生成xml文件
Jun 04 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 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中MVC的开发经验分享
2012/05/17 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP中的use关键字概述
2014/07/23 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
详解json在php中的应用
2018/09/30 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
tab栏切换原理
2017/03/22 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
Python中zip()函数用法实例教程
2014/07/31 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python通过zabbix api获取主机
2018/09/17 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
最新的咖啡店创业计划书
2013/12/30 职场文书
室内拓展活动方案
2014/02/13 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python