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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python基于dom操作xml数据的方法示例
May 12 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python将字母转化为数字实例方法
Oct 04 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
如何利用python生成MD5并去重
Dec 07 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 Python
python+opencv实现目标跟踪过程
Jun 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
一个程序下载的管理程序(四)
2006/10/09 PHP
一个MYSQL操作类
2006/11/16 PHP
php绘制一个矩形的方法
2015/01/24 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP Include文件实例讲解
2019/02/15 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
Python制作Windows系统服务
2017/03/25 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
Python之list对应元素求和的方法
2018/06/28 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
Python多图片合并PDF的方法
2019/01/03 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
小学生优秀评语大全
2014/04/22 职场文书
出售房屋委托书范本
2014/09/24 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python