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 相关文章推荐
简单的编程0基础下Python入门指引
Apr 01 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
深入理解Python中的内置常量
May 20 Python
简单了解Django模板的使用
Dec 20 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
numpy.linspace函数具体使用详解
May 27 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 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无限极分类实现的两种解决方法
2013/04/28 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
JSON 数据格式介绍
2012/01/13 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
Python构建网页爬虫原理分析
2017/12/19 Python
python中format()函数的简单使用教程
2018/03/14 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
旷课检讨书1000字
2014/02/14 职场文书
食品安全承诺书范文
2014/08/29 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
民事起诉状范文
2015/05/19 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP