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警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
python简单实现计算过期时间的方法
Jun 09 Python
Python中is与==判断的区别
Mar 28 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
运行django项目指定IP和端口的方法
May 14 Python
用python生成1000个txt文件的方法
Oct 25 Python
Python线程之定位与销毁的实现
Feb 17 Python
python内打印变量之%和f的实例
Feb 19 Python
如何利用python进行时间序列分析
Aug 04 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
angularJS 入门基础
2015/02/09 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
python求pi的方法
2014/10/08 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
Python绘图实现显示中文
2019/12/04 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
python实现处理mysql结果输出方式
2020/04/09 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
学生会干部自荐信
2014/02/04 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers