Python 日志记录器logging 百科全书 之 日志回滚

在这里插入图片描述

Python 日志记录器logging 百科全书 之 日志回滚

前言

在之前的文章中,我们学习了关于Python日志记录的基础配置

本文将深入探讨Python中的日志回滚机制,这是一种高效管理日志文件的方法,特别适用于长时间运行或高流量的应用。

知识点📖📖

模块释义
loggingPython 的日志记录工具,标准库
RotatingFileHandler基于文件大小进行日志回滚的处理器。
TimedRotatingFileHandler基于时间间隔进行日志回滚的处理器。

导入模块

import logging
from logging.handlers import (RotatingFileHandler, TimedRotatingFileHandler)

文章脉络:

  • 点击直达:万字长文 - Python 日志记录器logging 百科全书 之 基础配置
  • 点击直达:Python 日志记录器logging 百科全书 之 日志回滚

日志回滚

Python中,日志回滚通常通过logging.handlers模块中的RotatingFileHandlerTimedRotatingFileHandler实现。

  • RotatingFileHandler: 当日志文件达到指定大小时,自动“回滚”日志文件,即创建一个新的日志文件,并将旧文件保留为备份。
  • RotatingFileHandler: 根据时间间隔回滚日志文件,可以是每秒、每分钟、每小时或每天等。

概念

通过灵活地使用Logger和多个Handler,可以构建一个强大而灵活的日志系统,它可以同时满足日志记录的多样化需求,如日志的级别、格式、输出目的地等,从而为应用程序的监控和故障排查提供强有力的支持。

Logger(日志记录器)

  • Logger是日志系统的入口。应用程序通过Logger实例来记录日志。
  • 功能:Logger负责捕获日志消息并将它们分发给所有附加的Handler。
  • 日志级别:Logger可以设置日志级别,以决定要处理哪些级别的日志消息。

Handler(日志处理器)

  • Handler负责将日志消息发送到指定的目的地,这个目的地可以是文件、控制台、网络等。
  • 类型:包括但不限于StreamHandler(控制台输出)、FileHandler(写入文件)、RotatingFileHandler(基于文件大小回滚的文件写入)、TimedRotatingFileHandler(基于时间间隔回滚的文件写入)等。
  • 独立配置:每个Handler可以有自己的日志级别和格式设置(通过Formatter)。这允许不同的Handler以不同的方式处理相同的日志消息。

多处理器配置

  • 灵活性:一个Logger可以附加多个Handler,每个Handler可以独立配置,增加了日志系统的灵活性和可定制性。
  • 举例:例如配置一个Logger,使其同时将日志消息输出到控制台(使用StreamHandler)和文件(使用FileHandlerRotatingFileHandler)。
  • 级别和格式的多样性:不同的Handler可以设置不同的日志级别和格式。例如对于调试目的,在控制台上输出所有级别的日志,而在文件中只记录警告或更高级别的日志。

步骤

值得注意的是,这里的设置日志级别和日志格式,与前文的basicConfig是不一样滴~,细看下文!!!

设置日志回滚的步骤如下:

  1. 创建日志记录器(Logger):实例化一个日志记录器,为日志消息提供一个捕获和分发的入口点;
  2. 创建日志格式(Formatter):创建一个Formatter对象,指定日志消息的格式;
  3. 实例化日志处理器(Handler):根据需要选择适当的处理器,例如FileHandlerRotatingFileHandler等;
  4. 添加处理器(Handler)到记录器(Logger):最后,将这些处理器添加到日志记录器(Logger);
  5. 记录日志:使用配置好的日志记录器来记录消息
  6. (可选)清理旧日志文件

1. 创建日志记录器(Logger)

  • 实例化一个日志记录器,为日志消息提供一个捕获和分发的入口点。
  • 命名可随意,如不传入,默认返回 root logger
logger = logging.getLogger(name="my_application_logger")
logger.setLevel(logging.INFO)

2. 创建日志格式(Formatter)

  • 创建一个Formatter对象,定义日志消息的输出格式。这可以包括时间戳、日志级别、消息等。
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

3. 实例化日志处理器(Handler)

根据需要选择适当的处理器,

对于基于文件大小的回滚

  • 创建一个RotatingFileHandler,设置最大文件大小和备份文件数量。
rotating_handler = RotatingFileHandler("my_log.log", maxBytes=1024*1024, backupCount=5)
rotating_handler.setFormatter(formatter)

对于基于时间的回滚

  • 创建一个TimedRotatingFileHandler,设置回滚时间(如午夜)、间隔和备份文件数量。
timed_handler = TimedRotatingFileHandler("my_log.log", when="midnight", interval=1, backupCount=7)
timed_handler.setFormatter(formatter)

4. 添加处理器(Handler)到记录器(Logger)

  • 将配置好的处理器添加到日志记录器。这使得日志消息可以按照处理器的配置被处理和输出。
  • 同时添加多个日志处理器 也没任何问题~
logger.addHandler(rotating_handler)
logger.addHandler(timed_handler)

5. 记录日志

  • 使用配置好的日志记录器来记录消息。根据记录器和处理器的配置,日志消息将按照指定的方式被处理和存储。
logger.info("This is a test log message.")

6. (可选) 清理旧日志文件

  • 定期清理旧的日志文件是维护日志系统的一部分。可以编写脚本或使用工具来自动删除过时的日志文件,以释放磁盘空间。
import os
import glob
import timelog_dir = '/logs'
# 查找目录中所有扩展名为.log的文件
log_files = glob.glob(os.path.join(log_dir, '*.log'))for log_file in log_files:# 检查文件的最后修改日期# 判断文件的最后修改时间是否早于当前时间7天(7 * 24 * 3600秒)if os.path.getmtime(log_file) < (time.time() - 7 * 24 * 3600):os.remove(log_file)

RotatingFileHandler

RotatingFileHandler是用于基于文件大小的日志回滚。当日志文件达到指定大小时,它会自动 回滚 日志文件。

主要参数

  1. filename:日志文件的名称。
  2. mode:文件的打开模式。默认是 'a',表示追加模式。其他常见模式包括 'w'(写模式,每次启动时覆盖文件)。
  3. maxBytes:日志文件的最大字节数。当文件大小超过这个值时,会创建一个新文件。如app.log.1, app.log.2
  4. backupCount:保留的备份文件数量。比如,如果设置为5,则除了原始日志文件外,还会有5个备份文件。
  5. encoding(可选):文件的编码方式,同basicConfig
  6. delay(可选):如果设置为True,则直到第一次调用emit()方法时才会创建文件。即直到日志系统实际写入消息时才创建文件,避免创建空日志文件
  7. errors:指定如何处理编码错误,同basicConfig

示例代码

import logging
from logging.handlers import RotatingFileHandler# 创建日志记录器,设置日志级别为INFO
logger = logging.getLogger("my_app_logger")
logger.setLevel(logging.INFO)# 创建 RotatingFileHandler
# 设置文件最大大小为1MB,最多保留3个备份
handler = RotatingFileHandler("./logs/app.log", maxBytes=1024*1024, backupCount=3)
handler.setLevel(logging.INFO)# 创建日志格式并设置给处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)# 将处理器添加到日志记录器
logger.addHandler(handler)# 记录一些示例日志
for i in range(1000):logger.info(f"This is log message {i}")

TimedRotatingFileHandler

TimedRotatingFileHandler用于基于时间的日志回滚。根据指定的时间间隔回滚日志文件。

主要参数

  1. filename:日志文件的名称。
  2. when:时间间隔的类型。常见值有'S'(秒),'M'(分钟),'H'(小时),'D'(天),'W0'-'W6'(周一至周日),'midnight'(每天午夜)。
  3. interval:回滚之间的时间间隔。与when参数一起使用。例如,when='H'interval=6表示每6小时回滚一次日志文件。
  4. backupCount:保留的备份文件数量。比如,如果设置为5,则除了原始日志文件外,还会有5个备份文件。
  5. encoding(可选):文件的编码方式,同basicConfig
  6. delay(可选):如果设置为True,则直到第一次调用emit()方法时才会创建文件。即直到日志系统实际写入消息时才创建文件,避免创建空日志文件
  7. utc:如果设置为True,则时间间隔的计算基于UTC时间。默认为False,基于本地时间。
  8. atTime(可选):如果when设置为'midnight',这个参数可以用来指定回滚发生的具体时间。
  9. errors:指定如何处理编码错误,同basicConfig

示例代码

import logging
from logging.handlers import TimedRotatingFileHandler# 创建日志记录器,设置日志级别为INFO
logger = logging.getLogger("my_app_logger")
logger.setLevel(logging.INFO)# 创建 TimedRotatingFileHandler
# 设置每天午夜回滚一次日志,保留最多7个备份
handler = TimedRotatingFileHandler("./logs/app.log", when="midnight", interval=1, backupCount=7)
handler.setLevel(logging.INFO)# 创建日志格式并设置给处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)# 将处理器添加到日志记录器
logger.addHandler(handler)# 记录一些示例日志
for i in range(1000):logger.info(f"This is log message {i}")

应用场景

日志处理器应用场景优势
RotatingFileHandler- 日志活动频繁但数据量可预测的环境
- 控制日志文件大小,避免单个文件过大
- 防止日志文件过大,便于文件传输和查看
- 适合稳定的日志输出环境
TimedRotatingFileHandler- 需要按时间周期归档日志的情况
- 定期审查或归档日志,如审计和系统监控
- 根据时间自动组织日志文件
- 便于日志的定期查找和分析

总结🐓🐓

本文详细探讨了Python中的日志回滚机制,包括RotatingFileHandlerTimedRotatingFileHandler两种关键的日志处理器。这些处理器不仅增强了日志系统的灵活性,还大大简化了日志管理,特别适用于长时间运行或高流量的应用。

日志回滚是一种高效的日志管理技术,能够自动控制日志文件的大小和生命周期。通过正确使用RotatingFileHandlerTimedRotatingFileHandler,我们可以为应用程序提供稳定、可靠的日志记录机制,保障应用程序的健康运行。

后话

本次分享到此结束,

see you~🐱‍🏍🐱‍🏍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NFTScan | 11.06~11.12 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.11.06~ 2023.11.12 NFT Hot News 01/ 《辛普森一家》提及 NFT 及区块链&#xff0c;相关 NFT 地板价涨至 0.35 ETH 11 月 6 日&#xff0c;据 Coindesk 报道&#xff0c;美国时间周…

数据分析-numpy

numpy numpy numpy简介优点下载ndarray的属性输出数据类型routines 函数ndarray对象的读写操作ndarray的级联和切分级联切分 ndarray的基本运算广播机制&#xff08;Broadcast&#xff09;ndarry的聚合操作数组元素的操作numpy 数学函数numpy 查找和排序 写在最后面 简介 nump…

RabbitMQ实战

文章目录 1、简介2、MQ优点缺点MQ的应用场景AMQP工作原理市面上常见的MQ 3、Linux安装RabbitMQ3.1 版本对应3.2 安装socat3.3 下载 Erlang/OTP、安装、验证 erlang方法一&#xff1a;1. 下载2. 将下载的Erlang服务上传到服务器上面3. 解压4. 编译erlang的依赖环境5. 安装Erlang…

[PyTorch][chapter 62][强化学习-基本概念]

前言&#xff1a; 目录&#xff1a; 强化学习概念 马尔科夫决策 Bellman 方程 格子世界例子 一 强化学习 强化学习 必须在尝试之后&#xff0c;才能发现哪些行为会导致奖励的最大化。 当前的行为可能不仅仅会影响即时奖赏&#xff0c;还有影响下一步奖赏和所有奖赏 强…

ADFS 高可用配置 + NLB配置(Windows网络负载均衡)

ADFS 高可用配置 NLB配置&#xff08;Windows网络负载均衡&#xff09; ADFS安装配置NLB配置节点 TEST-ADFS-01 网络负载平衡配置节点 TEST-ADFS-02 网络负载平衡修改CRM配置 ADFS实现高可用负载均衡有两种&#xff0c;主要是在数据库的选择方式&#xff1a; windows自带的内…

P36[11-1]SPI通信协议

SPI相比于IIC的优缺点: 1.SPI传输速度快(IIC高电平驱动能力较弱,因此无法高速传输) 2.使用简单 3.通信线多 SCK(SCLK,CK,CLK):串行时钟线 MOSI(DO):主机输出,从机输入 MISO(DI): 主机输入,从机输出 SS(NSS,CS):从机选择(有多少个从机,主机就要用几根SS分别与从机连接…

关于财税体制什么是扁平化?三级财政西方的龙骑兵FIBW 10道练习题第五题

目录 关于财税体制什么是扁平化&#xff1f; 三级财政 西方的龙骑兵 FIBW 10道练习题 第五题 关于财税体制什么是扁平化&#xff1f; 在财税领域&#xff0c;"扁平化"&#xff08;Flattening&#xff09;通常指的是简化税收结构&#xff0c;减少税种和税率的层…

【系统安装】ubuntu20.04启动盘制作,正经教程,小白安装教程,百分百成功安装

1.所需材料&#xff1a; 64GBU盘&#xff08;其实8g和16g也可以&#xff09; 2.制作U盘启动盘 使用windows制作ubuntu 20.04启动盘 1&#xff09;下载制作工具&#xff1a;Rufus&#xff1a;Rufus - 轻松创建 USB 启动盘 2&#xff09;插入用来做启动盘的U盘 3&#xff0…

【c++】——类和对象(中)——实现完整的日期类

作者:chlorine 专栏:c专栏 我的花一定会开。 【学习目标】 拷贝复制——赋值运算符重载 目录 &#x1f393;运算符重载(-><...) &#x1f393;日期&天数 &#x1f393;前置和后置重载 我们完成了赋值运算符重载章节的学习&#xff0c;对operator关键字的使用有…

7.外部存储器,Cache,虚拟存储器

目录 一. 外部存储器 &#xff08;1&#xff09;磁盘存储器 1.磁盘的组成 2.磁盘的性能指标 3.磁盘地址 4.硬盘的工作过程 5.磁盘阵列 &#xff08;2&#xff09;固态硬盘&#xff08;SSD&#xff09; 二. Cache基本概念与原理 三. Cache和主存的映射方式 &#xff…

「帝国风暴兵」加入 The Sandbox,推出真实的全新人物化身系列和体验!

我们很高兴宣布与流行文化中最具标志性的娱乐品牌 Shepperton 设计工作室的「帝国风暴兵」达成合作伙伴关系。这一合作标志着该科幻品牌首次进入元宇宙&#xff0c;让风暴兵的粉丝们以全新的方式体验「帝国风暴兵」。 在这个体验中&#xff0c;玩家将置身于帝国风暴兵的营地&am…

No199.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…