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编写一个国际象棋AI程序
Nov 28 Python
python搜索指定目录的方法
Apr 29 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
python获取服务器响应cookie的实例
Dec 28 Python
pandas取出重复数据的方法
Jul 04 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
python配置文件写入过程详解
Oct 19 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
Python创建文件夹与文件的快捷方法
Dec 08 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
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
强制设为首页代码
2006/06/19 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
react redux入门示例
2018/04/19 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
医科大学生的自我评价
2013/12/04 职场文书
上党课的心得体会
2014/09/02 职场文书
清明节寄语2015
2015/03/23 职场文书
电影建国大业观后感
2015/06/01 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL
Python与C++中梯度方向直方图的实现
2022/03/17 Python
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript