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 fabric实现远程操作和部署示例
Mar 25 Python
python中__call__方法示例分析
Oct 11 Python
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
python使用range函数计算一组数和的方法
May 07 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
Django Rest framework权限的详细用法
Jul 25 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
python 发送get请求接口详解
Nov 17 Python
python中append函数用法讲解
Dec 11 Python
Python运算符+与+=的方法实例
Feb 18 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上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
小谈php正则提取图片地址
2014/03/27 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jQuery使用方法
2017/02/04 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
python+OpenCV实现图像拼接
2020/03/05 Python
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
2014年妇女工作总结
2014/12/06 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
vue实现在data里引入相对路径
2022/06/05 Vue.js