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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
python实现简单淘宝秒杀功能
May 03 Python
python使用代理ip访问网站的实例
May 07 Python
python如何制作英文字典
Jun 25 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
python调用接口的4种方式代码实例
Nov 19 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
Python学习之os包使用教程详解
Mar 21 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
php算法实例分享
2015/07/14 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
js中new一个对象的过程
2017/02/20 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
python opencv之SURF算法示例
2018/02/24 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
Django组件content-type使用方法详解
2019/07/19 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
竞选班长演讲稿400字
2014/08/22 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis