Python logging模块handlers用法详解


Posted in Python onAugust 14, 2020

一、handlers是什么?

logging模块中包含的类

用来自定义日志对象的规则(比如:设置日志输出格式、等级等)

常用3个子类:StreamHandler、FileHandler、TimedRotatingFileHandler

二、handlers基础应用

2.1 StreamHandler 控制台输出日志

import logging

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建StreamHandler对象
sh = logging.StreamHandler()
#StreamHandler对象自定义日志级别
sh.setLevel(logging.DEBUG)
#StreamHandler对象自定义日志格式
sh.setFormatter(formatter)

logger.addHandler(sh)  #logger日志对象加载StreamHandler对象
#日志输出
logger.info('newdream')

上面代码执行后,会在控制台输出日志信息。

2.2 FileHandler 日志输出到文件

import logging

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建FileHandler对象
fh = logging.FileHandler('test.log')
#FileHandler对象自定义日志级别
fh.setLevel(logging.DEBUG)
#FileHandler对象自定义日志格式
fh.setFormatter(formatter)

logger.addHandler(fh)  #logger日志对象加载FileHandler对象
#日志输出
logger.info('newdream')

上面代码执行后,控制台不会输出日志信息,而会在当前文件夹新建一个test.log日志文件进行日志记录。

2.3 TimedRotatingFileHandler 日志分割

import logging
from logging import handlers

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建TimedRotatingFileHandler对象
rh = handlers.TimedRotatingFileHandler("test.log", when='S', interval=1, backupCount=5)
#TimedRotatingFileHandler对象自定义日志级别
rh.setLevel(logging.DEBUG)
#TimedRotatingFileHandler对象自定义日志级别
rh.suffix = "%Y_%m_%d_%H_%M_%S.log"
#TimedRotatingFileHandler对象自定义日志格式
rh.setFormatter(formatter)

logger.addHandler(rh)  #logger日志对象加载TimedRotatingFileHandler对象
#日志输出
logger.info('newdream')

上面代码执行后,控制台不会输出日志信息,而会在当前文件夹新建一个 test_年_月_日_时_分_秒.log 日志文件进行日志记录。

在使用TimedRotatingFileHandler创建对象时,它的构造函数定义如下:

  • TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
  • filename:是输出日志文件名的前缀,比如log/myapp.log
  • when:按什么日期格式切分,接收指定字符串参数,接收的值如下:

“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

interval 是指等待多少个单位when的时间后,Logger会自动重建文件,这个文件的创建取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以有些情况suffix要定义不能因为when而重复。
backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设为5,则在文件的创建过程中库会判断是否有超过这个5,若超过,则会从最先创建的开始删除。

三、小结

以上的日志实例为了让读者更清晰的操作和理解,分开代码单独实现

在 2.3 中 如果想实现看是否达到5个日志就删除的效果,可以把日志用循环输出,如下:

while True:
logger.info('newdream')

三种handlers日志可以共同使用,都是独立的handler对象,但一般 FileHandler 和 TimedRotatingFileHandler 不会同时使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
python3.6+selenium实现操作Frame中的页面元素
Jul 16 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
深入了解python中元类的相关知识
Aug 29 Python
python解析命令行参数的三种方法详解
Nov 29 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
没编程基础可以学python吗
Jun 17 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
Python代码注释规范代码实例解析
Aug 14 #Python
Python发送邮件实现基础解析
Aug 14 #Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 #Python
Python编写memcached启动脚本代码实例
Aug 14 #Python
Python自动巡检H3C交换机实现过程解析
Aug 14 #Python
基于python调用jenkins-cli实现快速发布
Aug 14 #Python
使用tensorflow进行音乐类型的分类
Aug 14 #Python
You might like
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
VBScript版代码高亮
2006/06/26 Javascript
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
蔻驰法国官网:COACH法国
2018/11/14 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
公司JAVA开发面试题
2015/04/02 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
房地产销售员的自我评价分享
2013/12/04 职场文书
技校生自我鉴定
2013/12/08 职场文书
优秀小学生家长评语
2014/01/30 职场文书
小区消防演习方案
2014/02/21 职场文书
信息管理专业自荐书
2014/06/05 职场文书
最美乡村教师观后感
2015/06/11 职场文书
小学体育教学随笔
2015/08/14 职场文书