python中用logging实现日志滚动和过期日志删除功能


Posted in Python onAugust 20, 2019

logging库提供了两个可以用于日志滚动的class(可以参考https://docs.python.org/2/library/logging.handlers.html),一个是RotatingFileHandler,它主要是根据日志文件的大小进行滚动,另一个是TimeRotatingFileHandler,它主要是根据时间进行滚动。在实际应用中,我们通常根据时间进行滚动,因此,本文中主要介绍TimeRotaingFileHandler的使用方法(RotatingFileHandler一样)。代码示例如下:

#!/usr/bin/env python
#_*_coding:utf-8_*_
# vim : set expandtab ts=4 sw=4 sts=4 tw=100 :

import logging
import time
import re
from logging.handlers import TimedRotatingFileHandler
from logging.handlers import RotatingFileHandler

def main():
 #日志打印格式
 log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
 formatter = logging.Formatter(log_fmt)
 #创建TimedRotatingFileHandler对象
 log_file_handler = TimedRotatingFileHandler(filename="ds_update", when="M", interval=2, backupCount=2)
 #log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
 #log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
 log_file_handler.setFormatter(formatter) 
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger()
 log.addHandler(log_file_handler)
 #循环打印日志
 log_content = "test log"
 count = 0
 while count < 30:
  log.error(log_content)
  time.sleep(20)
  count = count + 1
 log.removeHandler(log_file_handler)


if __name__ == "__main__":
 main()

filename:日志文件名的prefix;

when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下:

“S”: Seconds

“M”: Minutes

“H”: Hours

“D”: Days

“W”: Week day (0=Monday)

“midnight”: Roll over at midnight

interval: 滚动周期,单位有when指定,比如:when='D',interval=1,表示每天产生一个日志文件;
backupCount: 表示日志文件的保留个数;

除了上述参数之外,TimedRotatingFileHandler还有两个比较重要的成员变量,它们分别是suffix和extMatch。suffix是指日志文件名的后缀,suffix中通常带有格式化的时间字符串,filename和suffix由“.”连接构成文件名(例如:filename=“runtime”, suffix=“%Y-%m-%d.log”,生成的文件名为runtime.2015-07-06.log)。extMatch是一个编译好的正则表达式,用于匹配日志文件名的后缀,它必须和suffix是匹配的,如果suffix和extMatch匹配不上的话,过期的日志是不会被删除的。比如,suffix=“%Y-%m-%d.log”, extMatch的只应该是re.compile(r”^\d{4}-\d{2}-\d{2}.log$”)。默认情况下,在TimedRotatingFileHandler对象初始化时,suffxi和extMatch会根据when的值进行初始化:

‘S': suffix=”%Y-%m-%d_%H-%M-%S”, extMatch=r”\^d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}”; 
‘M':suffix=”%Y-%m-%d_%H-%M”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}”; 
‘H':suffix=”%Y-%m-%d_%H”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}”; 
‘D':suffxi=”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”; 
‘MIDNIGHT':”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”; 
‘W':”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;

如果对日志文件名没有特殊要求的话,可以不用设置suffixextMatch,如果需要,一定要让它们匹配上。

总结

以上所述是小编给大家介绍的python中用logging实现日志滚动和过期日志删除功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
极简的Python入门指引
Apr 01 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
使用Python横向合并excel文件的实例
Dec 11 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
Python遍历字典方式就实例详解
Dec 28 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 Python
python 实现体质指数BMI计算
May 26 Python
 python中的元类metaclass详情
May 30 Python
python3中替换python2中cmp函数的实现
Aug 20 #Python
python 并发编程 多路复用IO模型详解
Aug 20 #Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 #Python
对pytorch中的梯度更新方法详解
Aug 20 #Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 #Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 #Python
pytorch 加载(.pth)格式的模型实例
Aug 20 #Python
You might like
php 中的4种标记风格介绍
2012/05/10 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
php无序树实现方法
2015/07/28 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
解读! Python在人工智能中的作用
2017/11/14 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
python实现五子棋游戏
2019/06/18 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Python的pygame安装教程详解
2020/02/10 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
音乐幼师求职信
2014/07/09 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫