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脚本实时处理log文件的方法
Nov 21 Python
scrapy爬虫实例分享
Dec 28 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
python实现换位加密算法的示例
Oct 14 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
python通过http下载文件的方法详解
Jul 26 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
pytorch进行上采样的种类实例
Feb 18 Python
python中xlutils库用法浅析
Dec 29 Python
PYTHON InceptionV3模型的复现详解
May 06 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
Js+XML 操作
2006/09/20 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
Vue实现导出excel表格功能
2018/03/30 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
用python 制作图片转pdf工具
2015/01/30 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
中文系学生自荐信范文
2013/11/13 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
活动志愿者自荐信
2014/01/27 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
加薪申请报告范本
2015/05/15 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python