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 遍历列表里面序号和值的方法(三种)
Feb 17 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
对python3 urllib包与http包的使用详解
May 10 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Python创建字典的八种方式
Feb 27 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
python Yaml、Json、Dict之间的转化
Oct 19 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
php Undefined index的问题
2009/06/01 PHP
深入解析php之sphinx
2013/05/15 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
jquery键盘事件介绍
2011/01/31 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
JS中的三个循环小结
2017/06/20 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
python去掉行尾的换行符方法
2017/01/04 Python
利用python循环创建多个文件的方法
2018/10/25 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
python接口自动化框架实战
2020/12/23 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
资金主管岗位职责范本
2014/03/04 职场文书
网络管理专业求职信
2014/03/15 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
体育教师个人总结
2015/02/09 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle