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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
跟老齐学Python之变量和参数
Oct 10 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Python 忽略文件名编码的方法
Aug 01 Python
python实现socket简单通信的示例代码
Apr 13 Python
Python常遇到的错误和异常
Nov 02 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的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
js单例模式详解实例
2013/11/21 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python GUI实例学习
2017/11/21 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Python二维码生成识别实例详解
2019/07/16 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Python如何实现远程方法调用
2020/08/07 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
C++的几个面试题附答案
2016/08/03 面试题
生物化工工艺专业应届生求职信
2013/10/08 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
捐款通知怎么写
2015/04/24 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
box-shadow单边阴影的实现
2023/05/21 HTML / CSS