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基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
如何利用python查找电脑文件
Apr 27 Python
使用Python函数进行模块化的实现
Nov 15 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
python实现批处理文件
Jul 28 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php分页示例分享
2014/04/30 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
解析python的局部变量和全局变量
2019/08/15 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python笔试面试题小结
2019/09/07 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
恒华伟业笔试面试题
2015/02/26 面试题
小学三年级数学教学反思
2014/01/31 职场文书
银行工作检查书范文
2014/01/31 职场文书
服务承诺口号
2014/05/22 职场文书
2014年班组长工作总结
2014/11/20 职场文书
活动主持人开场白
2015/05/28 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android