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之玩转字符串(2)更新篇
Sep 28 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
详细介绍Python的鸭子类型
Sep 12 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
使用python画社交网络图实例代码
Jul 10 Python
Python字符串格式化输出代码实例
Nov 22 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
详解pandas赋值失败问题解决
Nov 29 Python
python3处理word文档实例分析
Dec 01 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 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中使用Oracle数据库(5)
2006/10/09 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Django实现快速分页的方法实例
2017/10/22 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
建筑施工员岗位职责
2013/11/26 职场文书
乡下人家教学反思
2014/02/01 职场文书
挂靠协议书范本
2014/04/22 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
英语教师求职信
2014/06/16 职场文书
化工工艺设计求职信
2014/06/25 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
搬迁通知
2015/04/20 职场文书
2015年教师节主持词
2015/07/03 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
nginx请求限制配置方法
2021/07/09 Servers
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电