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 相关文章推荐
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
实践Vim配置python开发环境
Jul 02 Python
分享vim python缩进等一些配置
Jul 02 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
python怎么判断模块安装完成
Jun 19 Python
python 实现端口扫描工具
Dec 18 Python
python元组拆包实现方法
Feb 28 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安全上传图片的方法
2015/03/21 PHP
PHP输出日历表代码实例
2015/03/27 PHP
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python数据类型详解(二)列表
2016/05/08 Python
Python计算字符宽度的方法
2016/06/14 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
如何使用PHP session
2015/04/21 面试题
专业毕业生个性的自我评价
2013/10/03 职场文书
党支部书记先进事迹
2014/01/17 职场文书
英语简历自我评价
2014/01/26 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
贫困证明怎么写
2015/06/16 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书