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 相关文章推荐
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
玩转python爬虫之正则表达式
Feb 17 Python
python函数的5种参数详解
Feb 24 Python
python遍历文件夹下所有excel文件
Jan 03 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
python内置函数sorted()用法深入分析
Oct 08 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
Python代码中如何读取键盘录入的值
May 27 Python
Python数据分析之绘图和可视化详解
Jun 02 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
VueJS全面解析
2016/11/10 Javascript
基于vue实现分页效果
2017/11/06 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
python使用matplotlib绘制热图
2018/11/07 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python批量修改交换机密码的示例
2020/09/22 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
xxx同志考察材料
2014/02/07 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
演讲稿之开卷有益
2019/08/07 职场文书