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导出Excel图表以及导出为图片的方法
Nov 07 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
python自动发送邮件脚本
Jun 20 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
python numpy数组复制使用实例解析
Jan 10 Python
python判断正负数方式
Jun 03 Python
python学习将数据写入文件并保存方法
Jun 07 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 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
PHP微信开发之二维码生成类
2015/06/26 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
php实现购物车功能(下)
2016/01/05 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
Python的迭代器和生成器使用实例
2015/01/14 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
岗位职责定义及内容
2013/11/08 职场文书
授权委托书(完整版)
2014/09/10 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
大雁塔英文导游词
2015/02/10 职场文书
大学教师个人总结
2015/02/10 职场文书
单位政审意见范文
2015/06/04 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL