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爬虫代理IP池实现方法
Jan 05 Python
Python断言assert的用法代码解析
Feb 03 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
Python变量访问权限控制详解
Jun 29 Python
Python计算公交发车时间的完整代码
Feb 12 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
Python中22个万用公式的小结
Jul 21 Python
python之基数排序的实现
Jul 26 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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学习 变量使用总结
2011/03/24 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
python文字转语音实现过程解析
2019/11/12 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
四风问题自查报告剖析材料
2014/02/08 职场文书
公司中秋节活动方案
2014/02/12 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
教师个人师德总结
2015/02/06 职场文书
创先争优个人总结
2015/03/04 职场文书
初中语文教学研修日志
2015/11/13 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
Nginx反向代理学习实例教程
2021/10/24 Servers
如何基于python实现单目三维重建详解
2022/06/25 Python