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 23 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Python中join函数简单代码示例
Jan 09 Python
Python编写带选项的命令行程序方法
Aug 13 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
pytorch实现查看当前学习率
Jun 24 Python
python3访问字典里的值实例方法
Nov 18 Python
python excel多行合并的方法
Dec 09 Python
python使用torch随机初始化参数
Mar 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
php命令行写shell实例详解
2018/07/19 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Python 元组操作总结
2019/09/18 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
公务员转正考察材料
2014/02/07 职场文书
个人简历中自我评价
2014/02/11 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
毕业生找工作求职信
2014/08/05 职场文书
2014年绿化工作总结
2014/12/09 职场文书
参观邀请函范文
2015/02/02 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
python运算符之与用户交互
2022/04/13 Python
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
MySQL导致索引失效的几种情况
2022/06/25 MySQL