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 图片验证码代码分享
Jul 04 Python
python使用百度翻译进行中翻英示例
Apr 14 Python
python插入数据到列表的方法
Apr 30 Python
python实现12306火车票查询器
Apr 20 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
Python ORM框架Peewee用法详解
Apr 29 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 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 cli模式学习(PHP命令行模式)
2013/06/03 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
DEFER怎么用?
2006/07/01 Javascript
XML的代替者----JSON
2007/07/21 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
python读取注册表中值的方法
2013/04/08 Python
python爬虫基本知识
2018/03/05 Python
用python生成1000个txt文件的方法
2018/10/25 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
sort命令的作用和用法
2012/11/04 面试题
出生证明公证书
2014/04/09 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
写给医生的感谢信
2015/01/22 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技