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和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
python的re正则表达式实例代码
Jan 24 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
python中property和setter装饰器用法
Dec 19 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 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 ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
js单例模式的两种方案
2013/10/22 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python2与python3共存问题的解决方法
2018/09/18 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
Python龙贝格法求积分实例
2020/02/29 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
高三自我评价
2014/02/01 职场文书
调查研究项目计划书
2014/04/29 职场文书
2014年党课学习材料
2014/05/11 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
甜品店创业计划书
2014/09/21 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技