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的词法分析与语法分析
May 18 Python
Python greenlet实现原理和使用示例
Sep 24 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
python中的二维列表实例详解
Jun 19 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
Python接口测试get请求过程详解
Feb 28 Python
python之基数排序的实现
Jul 26 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
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
python条件和循环的使用方法
2013/11/01 Python
Python判断Abundant Number的方法
2015/06/15 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
对Python3 序列解包详解
2019/02/16 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
python3实现绘制二维点图
2019/12/04 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
柏林通行证:Berlin Pass
2018/04/11 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
幼儿园小班教学反思
2014/02/02 职场文书
公证书标准格式
2014/04/10 职场文书
建设工地安全标语
2014/06/07 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
应聘教师自荐信
2015/03/26 职场文书
golang import自定义包方式
2021/04/29 Golang
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis