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中各种方法的运作原理
Jun 15 Python
Python在线运行代码助手
Jul 15 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
numpy.linspace函数具体使用详解
May 27 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
简单分析python的类变量、实例变量
Aug 23 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 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实现监听事件
2013/11/06 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
python处理文本文件并生成指定格式的文件
2014/07/31 Python
python微信公众号开发简单流程
2018/03/23 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
旅游管理毕业生自荐书
2014/02/02 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
物业管理专业求职信
2014/06/11 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
房屋出售授权委托书
2014/10/12 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
老公出轨后的保证书
2015/05/08 职场文书
2015小学师德工作总结
2015/07/21 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
Python 数据可视化之Bokeh详解
2021/11/02 Python