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嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python实现导出数据生成excel报表的方法示例
Jul 12 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
python机器学习之随机森林(七)
Mar 26 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
python实现tail -f 功能
Jan 17 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
python字符串的index和find的区别详解
Jun 20 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 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/11/26 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
PDO::setAttribute讲解
2019/01/29 PHP
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
学期自我鉴定范文
2013/10/01 职场文书
中专毕业生自我鉴定范文
2013/11/09 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
家具商场的活动方案
2014/08/16 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
面试通知单大全
2015/04/20 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫