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杀死一个线程的方法
Sep 06 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python操作oracle的完整教程分享
Jan 30 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
python数据归一化及三种方法详解
Aug 06 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
python爬虫泛滥的解决方法详解
Nov 25 Python
Python的信号库Blinker用法详解
Dec 31 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
jupyter 添加不同内核的操作
Feb 06 Python
python实现监听键盘
Apr 26 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
List all the Databases on a SQL Server
2007/06/21 Javascript
css图片自适应大小
2007/11/28 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
python检测lvs real server状态
2014/01/22 Python
Python标准库内置函数complex介绍
2014/11/25 Python
详解Python中DOM方法的动态性
2015/04/11 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
python wsgiref源码解析
2021/02/06 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
唱歌比赛拉拉队口号
2015/12/25 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android