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 10 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
python简单操作excle的方法
Sep 12 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
Django2.1.3 中间件使用详解
Nov 26 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
python本地文件服务器实例教程
May 02 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通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
js展开闭合效果演示代码
2013/07/24 Javascript
js 走马灯简单实例
2013/11/21 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python 调用HBase的简单实例
2016/12/18 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
如何在django中实现分页功能
2020/04/22 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
致铅球运动员加油稿
2014/02/13 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
安全隐患整改报告
2014/11/06 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
药房管理制度范本
2015/08/06 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书