python中logging库的使用总结


Posted in Python onOctober 18, 2017

前言

最近因为工作的需要,在写一些python脚本,总是使用print来打印信息感觉很low,所以抽空研究了一下python的logging库,来优雅的来打印和记录日志,下面话不多说了,来一起看看详细的介绍吧。

一、简单的将日志打印到屏幕:

import logging

logging.debug('This is debug message') #debug
logging.info('This is info message')  #info
logging.warning('This is warning message') #warn

屏幕上打印:WARNING:root:This is warning message

默认情况下,会打印WARNING级别的日志

  • DEBUG:详细信息,调试信息。
  • INFO:确认一切按预期运行。
  • WARNING:表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了')。软件还是在正常工作。
  • ERROR:由于更严重的问题,软件已不能执行一些功能了。
  • CRITICAL:严重错误,表明软件已不能继续运行了。

二、通过basicConfig函数来对日志的输入格式和方法进行配置

import logging

logging.basicConfig(level=logging.DEBUG,
  format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  datefmt='%Y-%m-%d %a %H:%M:%S',
  filename='test.log',
  filemode='w')
 
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

以上代码不会在屏幕上打印日志,而是会在当前目录生成test.log的日志文件,日志被打印在日志文件中:

2017-10-16 Mon 10:05:17 testlogging.py[line:25] DEBUG This is debug message

2017-10-16 Mon 10:05:17 testlogging.py[line:26] INFO This is info message

2017-10-16 Mon 10:05:17 testlogging.py[line:27] WARNING This is warning message

  • logging.basicConfig函数各参数:
  • filename: 指定日志文件名
  • filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
  • format: 指定输出的格式和内容,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: 打印日志信息
  • datefmt: 指定时间格式,同time.strftime()
  • level: 设置日志级别,默认为logging.WARNING
  • stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

三、同时将日志输出到屏幕和日志文件

#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

插入以上代码就可以同时在屏幕上打印出日志

屏幕上打印:

root : INFO This is info message

root : WARNING This is warning message

文件中打印:

2017-10-16 Mon 10:20:07 testlogging.py[line:46] DEBUG This is debug message

2017-10-16 Mon 10:20:07 testlogging.py[line:47] INFO This is info message

2017-10-16 Mon 10:20:07 testlogging.py[line:48] WARNING This is warning message

四、通过配置文件配置日志

#logger.conf
[loggers]
#定义logger模块,root是父类,必需存在的,其它的是自定义。 
keys=root,infoLogger,warnlogger

[logger_root] 
level=DEBUG    #level 级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
handlers=infohandler,warnhandler #handlers 处理类,可以有多个,用逗号分开

[logger_infoLogger]   #[logger_xxxx] logger_模块名称
handlers=infohandler
qualname=infoLogger   #qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
propagate=0    #propagate 是否继承父类的log信息,0:否 1:是

[logger_warnlogger]
handlers=warnhandler
qualname=warnlogger
propagate=0

###############################################
#定义handler
[handlers]
keys=infohandler,warnhandler

[handler_infohandler]
class=StreamHandler   #class handler类名
level=INFO    #level 日志级别
formatter=form02   #formatter,下面定义的formatter
args=(sys.stdout,)   #args handler初始化函数参数

[handler_warnhandler]
class=FileHandler
level=WARN
formatter=form01
args=('logs/deploylog.log', 'a')

###############################################
# 定义格式化输出
[formatters]
keys=form01,form02

[formatter_form01]
format=%(message)s %(asctime)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_form02]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

日志格式

  • %(asctime)s 年-月-日 时-分-秒,毫秒 2013-04-26 20:10:43,745
  • %(filename)s 文件名,不含目录
  • %(pathname)s 目录名,完整路径
  • %(funcName)s 函数名
  • %(levelname)s 级别名
  • %(lineno)d 行号
  • %(module)s 模块名
  • %(message)s 消息体
  • %(name)s 日志模块名
  • %(process)d 进程id
  • %(processName)s 进程名
  • %(thread)d 线程id
  • %(threadName)s 线程名

测试配置文件

from logging.config import fileConfig

fileConfig('logger.conf')
logger=logging.getLogger('infoLogger')
logger.info('test1')
logger_error=logging.getLogger('warnhandler')
logger_error.warn('test5')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python urlopen()函数 示例分享
Jun 12 Python
python分析nignx访问日志脚本分享
Feb 26 Python
Python NumPy库安装使用笔记
May 18 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
详解Python3注释知识点
Feb 19 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
Python制作数据预测集成工具(值得收藏)
Aug 21 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 #Python
Ubuntu安装Jupyter Notebook教程
Oct 18 #Python
python 中的divmod数字处理函数浅析
Oct 17 #Python
Python中的id()函数指的什么
Oct 17 #Python
Python中int()函数的用法浅析
Oct 17 #Python
一文总结学习Python的14张思维导图
Oct 17 #Python
python 中的int()函数怎么用
Oct 17 #Python
You might like
PHP 采集程序原理分析篇
2010/03/05 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
php去除HTML标签实例
2013/11/06 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
Node接收电子邮件的实例代码
2017/07/21 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Python的Django框架中的数据过滤功能
2015/07/17 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
python实现画循环圆
2019/11/23 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
《跨越百年的美丽》教学反思
2014/02/11 职场文书
安全生产实施方案
2014/02/23 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
2015年底工作总结范文
2015/05/15 职场文书
公务员处分决定书
2015/06/25 职场文书
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python
mysql函数全面总结
2021/11/11 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL