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实现备份文件实例
Sep 16 Python
python通过加号运算符操作列表的方法
Jul 28 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
Python中Numpy mat的使用详解
May 24 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
Python和Bash结合在一起的方法
Nov 13 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 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
js验证账户名是否重复
2020/05/26 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
Django admin美化插件suit使用示例
2017/12/12 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
2014全国两会学习心得体会2000字
2014/03/10 职场文书
体现团队精神的口号
2014/06/06 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
公司收款委托书范本
2014/09/20 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
单位接收函格式
2015/01/30 职场文书
水电工岗位职责
2015/02/14 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
给校长的建议书范文
2015/09/14 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers