Python中logging日志记录到文件及自动分割的操作代码
作者:行星带 发布时间:2022-09-08 12:33:33
标签:python,logging,日志记录,自动分割
日志作为项目开发和运行中必备组件,python提供了内置的logging模块来完成这个工作;借助 TimedRotatingFileHandler
可以按日期自动分割日志,自动保留日志文件数量等,下面是对日志的一个简单封装和测试。
import logging
import os
from logging import handlers
class Logger(object):
# 日志级别关系映射
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
def __init__(self,
filename,
level='info',
when='D',
back_count=3,
fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
f_dir, f_name = os.path.split(filename)
os.makedirs(f_dir, exist_ok=True) # 当前目录新建log文件夹
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt) # 设置日志格式
self.logger.setLevel(self.level_relations.get(level)) # 设置日志级别
sh = logging.StreamHandler() # 往屏幕上输出
sh.setFormatter(format_str) # 设置屏幕上显示的格式
th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=back_count,
encoding='utf-8') # 往文件里写入指定间隔时间自动生成文件的Handler
# 实例化TimedRotatingFileHandler
# interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
# S 秒
# M 分
# H 小时
# D 天
# 'W0'-'W6' 每星期(interval=0时代表星期一:W0)
# midnight 每天凌晨
th.setFormatter(format_str) # 设置文件里写入的格式
self.logger.addHandler(sh) # 把对象加到logger里
self.logger.addHandler(th)
# 测试
if __name__ == '__main__':
logger = Logger('./logs/2020/app.log', 'debug', 'S', 5).logger
logger.debug('debug')
logger.info('info')
logger.warning('警告')
logger.error('报错')
logger.critical('严重')
# 单独记录error
err_logger = Logger('./logs/2020/error.log', 'error', 'S', 3).logger
err_logger.error('错误 error')
为了测试方便,我们将时间间隔设为秒(按秒自动命名分割文件),多运行几次后,会按照配置文件数量将多余的日志文件自动删除,保留如上图中的日志文件。
原文链接:https://beltxman.com/3195.html,若无特殊说明本站内容为行星带原创,未经同意禁止转载!
来源:https://beltxman.com/3195.html


猜你喜欢
- 开始使用MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数
- 本文实例讲述了JS简单随机数生成方法。分享给大家供大家参考,具体如下:<!doctype html><html>&l
- Python中遍历列表有以下几种方法:一、for循环遍历lists = ["m1", 1900, "m2&qu
- 一、Tensorflow安装1、Tensorflow介绍Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一。T
- 一个动态数组 a,如果你已经使用redim 语句给它设定了大小,那么在此之后使用 ubound(a) 就可以得到它的上边界。如果你没有使用
- 前言本文主要给大家介绍了关于使用Python通过subprocess调用adb命令,subprocess包主要功能是执行外部命令(相对Pyt
- --------------------------------------------------------- 正则收藏 手机号码: $
- 一、数据库基础用法要先配置环境变量,然后cmd安装:pip install pymysql1、连接MySQL,并创建wzg库#引入decim
- 目录前言全局参数持久化写在最后总结参考文档:前言自从 2018 年发布第一版 MySQL 8.0.11 正式版至今,MySQL 版本已经更新
- 当我们的文章表中没有对于文章的评论数字段时,我们该这么写sql语句来显示出评论最多的文章呢?下面本站给大家收集了几种方法,仅供参考:1.se
- 转化时间类型to_datetime()方法to_datetime()方法支持将 int, float, str, datetime, lis
- 前言值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值
- 本文实例为大家分享了Python实现打乒乓小游戏的具体代码,供大家参考,具体内容如下源码奉上:import sysimport cfgimp
- 这篇文章主要介绍了Python如何使用Gitlab API实现批量的合并分支,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 图片优化1、图片大小优化,部分图片使用WebP(需要考虑webp兼容性)在线生成,如智图、又拍云gulp生成,gulp-webp或gulp-
- 过年GUI博客二连发,本打算出去玩玩,奈何空气,天气实在差,遂使用tkinter开发一款GUI刷屏器,写此博客记录一下我的开发思路。一.准备
- 一、界面介绍文件导航区域 能够 浏览/定位/打开 项目文件文件编辑区域 能够 编辑 当前打开的文件控制台区域 能够:输出程序执行内容跟踪调试
- facade模式,即门面模式,也称外观模式,这个模式的核心思想是使用facade对象为外部客户端提供一个统一的访问一组子系统的接口,即客户端
- 前言在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道
- 很多程序绕过这个问题,往往人工来决定在何处截断,太麻烦了。 实现内容:截断一段含有HTML代码的文本,但是不会出现围堵标记没有封闭的问题。