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模块学习 datetime介绍
Aug 27 Python
python实现计算资源图标crc值的方法
Oct 05 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
Python tcp传输代码实例解析
Mar 18 Python
Python气泡提示与标签的实现
Apr 01 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 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 Static关键字实用方法
2010/06/04 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
python远程连接MySQL数据库
2019/04/19 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
个人自我鉴定
2013/11/07 职场文书
大学生新闻专业个人自我评价
2013/11/12 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
管理部部长岗位职责
2013/12/05 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
2014年技术员工作总结
2014/11/18 职场文书
文明单位申报材料
2014/12/23 职场文书