你真的会用Python做日志轮转吗?1个配置拯救你的服务器存储空间

python-27-日志模块logging的应用 参考python日志模块的使用 参考日志处理 参考python标准日志模块logging及日志系统设计 1 示例代码 python的标准库里的日志系统从python2.3开始支持。 引入import logging这个模块即可使用。 如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,可以按下面的方式进行使用。 import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(loggi 阅读详情

第一章:你真的了解Python日志轮转的本质吗

在高并发或长时间运行的Python应用中,日志文件可能迅速膨胀,导致磁盘耗尽或排查困难。日志轮转(Log Rotation)正是为解决这一问题而生,但其本质远不止“按大小切分文件”这么简单。

日志轮转的核心机制

Python内置的 logging.handlers 模块提供了两种主要轮转方式:基于文件大小的 RotatingFileHandler 和基于时间的 TimedRotatingFileHandler。它们通过拦截写入操作,在满足条件时自动关闭当前文件并重命名,再创建新文件继续输出。
# 使用 RotatingFileHandler 实现按大小轮转
import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('rotating_logger')
logger.setLevel(logging.INFO)

# 当日志文件达到10MB时触发轮转,最多保留5个备份
handler = RotatingFileHandler(
    'app.log',
    maxBytes=10 * 1024 * 1024,  # 10MB
    backupCount=5
)
logger.addHandler(handler)

logger.info("这是一条测试日志")
上述代码中,maxBytes 控制单个文件大小上限,backupCount 决定保留的历史文件数量。当日志写入前检测到当前文件超过阈值,系统将当前文件重命名为 app.log.1,原有 .1 到 .4 依次后移,超出数量的最旧文件被删除。

轮转过程中的关键行为

  • 轮转发生在每次写入前的判断阶段,而非写入过程中
  • 重命名操作是原子性的,避免多进程竞争
  • 未使用文件锁机制,多进程环境下需额外处理
配置参数作用说明
maxBytes触发轮转的文件大小阈值
backupCount保留的备份文件最大数量
encoding日志文件编码格式,如UTF-8

第二章:深入理解Python日志轮转机制

2.1 日志轮转的核心原理与应用场景

日志轮转(Log Rotation)是一种管理日志文件大小和生命周期的机制,避免单个日志文件无限增长导致磁盘耗尽。其核心原理是按时间或文件大小触发日志归档,将当前日志重命名并生成新文件继续写入。
典型触发条件
  • 文件达到指定大小(如 100MB)
  • 按天、小时等时间周期
  • 系统维护任务定时触发
配置示例

/var/log/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}
上述配置表示每天轮转一次日志,保留7个历史版本,启用压缩。参数 `missingok` 允许日志文件不存在时不报错,`notifempty` 避免空文件触发轮转。
应用场景
场景说明
生产环境服务防止 Nginx、MySQL 等服务日志撑爆磁盘
审计合规保留固定周期日志以满足安全审查要求

2.2 基于文件大小的轮转:RotatingFileHandler详解

在日志管理中,当日志文件增长到一定大小时,需要自动分割以避免占用过多磁盘空间。Python 的 `logging.handlers.RotatingFileHandler` 提供了基于文件大小的轮转机制。
基本配置与参数说明
使用该处理器时,关键参数包括 `maxBytes` 和 `backupCount`,分别控制单个文件最大尺寸和保留的备份文件数量。
import logging
from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler('app.log', maxBytes=1024*1024, backupCount=5)
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)
logger.addHandler(handler)
上述代码创建一个最多 1MB 的日志文件,超过后生成 `app.log.1` 至 `app.log.5` 的备份文件。当达到 `backupCount` 上限时,最旧的日志将被覆盖。
轮转机制解析
  • maxBytes:触发轮转的文件大小阈值,设为0则不启用轮转;
  • backupCount:保留的历史文件数,影响磁盘占用策略;
  • 线程安全:该处理器在多线程环境下安全,但不适用于多进程。

2.3 基于时间的轮转:TimedRotatingFileHandler剖析

核心机制解析

TimedRotatingFileHandler 是 Python logging 模块中实现日志按时间滚动的核心类。它根据设定的时间间隔自动创建新的日志文件,有效避免单个文件过大。

关键参数配置

  • when:指定轮转周期单位,如 'S'(秒)、'H'(小时)、'D'(天)
  • interval:轮转间隔数值
  • backupCount:保留备份文件数量
import logging
from logging.handlers import TimedRotatingFileHandler
import time

logger = logging.getLogger("timed_logger")
handler = TimedRotatingFileHandler("app.log", when="M", interval=1, backupCount=5)
handler.suffix = "%Y%m%d_%H%M%S"
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.info("This is a test log entry")
time.sleep(60)  # 等待一分钟触发新文件生成

上述代码每分钟生成一个新日志文件,命名格式为 app.log.YYYYMMDDHHMMSS,并最多保留5个历史文件。suffix 设置确保文件名可读性强,便于后期追踪与归档。

2.4 轮转过程中的日志丢失与并发安全问题

在日志轮转(log rotation)过程中,若处理不当,极易引发日志丢失和并发写入冲突。典型场景是日志文件被重命名或删除的瞬间,正在写入的日志可能被截断或丢弃。
信号竞争与文件句柄失效
当日志轮转通过 SIGUSR1 触发时,应用程序若未正确关闭原文件句柄并重新打开新文件,会导致日志继续写入已被移动的旧文件中,造成数据不可见。
// 示例:安全的轮转处理
func ReopenLog() error {
    file, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        return err
    }
    logMutex.Lock()
    defer logMutex.Unlock()
    oldFile := logFile
    logFile = file
    oldFile.Close()
    return nil
}
上述代码通过互斥锁确保并发安全,并显式关闭旧句柄,避免资源泄漏。
常见风险对比
风险类型后果解决方案
并发写入日志错乱加锁或使用原子操作
句柄未刷新日志丢失Reopen后重定向

2.5 性能影响分析与系统资源消耗评估

资源监控指标采集
在高并发场景下,系统需持续监控CPU、内存、I/O及网络带宽等核心资源。通过/proc/stat和top工具可获取进程级资源占用数据,结合Prometheus实现秒级采样。
// 示例:Go语言中使用expvar暴露运行时指标
var (
    cpuUsage = expvar.NewFloat("cpu_usage_percent")
    memAlloc = expvar.NewFloat("memory_alloc_mb")
)

func updateMetrics() {
    var m runtime.MemStats
    runtime.ReadMemStats(&m)
    memAlloc.Set(float64(m.Alloc) / 1024 / 1024)
    cpuUsage.Set(getCPUPercent()) // 假设该函数返回当前CPU使用率
}
上述代码定期更新内存分配与CPU使用率,供外部监控系统拉取。参数说明:memAlloc反映堆内存实时占用,cpuUsage体现处理负载强度。
性能瓶颈识别方法
  • 使用pprof进行CPU与内存剖析
  • 通过火焰图定位热点函数调用路径
  • 分析上下文切换频率判断线程争用情况

第三章:主流日志轮转方案对比与选型

3.1 Python内置Handler vs 第三方库(如concurrent-log-handler)

Python标准库中的logging模块提供了多种内置Handler,如FileHandler、RotatingFileHandler等,适用于常规日志记录场景。
内置Handler的局限性
RotatingFileHandler在多进程环境下无法安全地进行日志轮转,可能导致日志丢失或文件损坏。例如:
import logging
from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler('app.log', maxBytes=1024, backupCount=3)
logger = logging.getLogger()
logger.addHandler(handler)
该代码在单进程下运行良好,但在多进程并发写入时缺乏锁机制保护。
第三方解决方案:concurrent-log-handler
concurrent-log-handler通过文件锁实现跨进程安全的日志轮转。其核心优势包括:
  • 自动加锁避免写冲突
  • 兼容标准logging接口
  • 支持按大小或时间轮转
安装与使用示例:
from concurrent_log_handler import ConcurrentRotatingFileHandler

handler = ConcurrentRotatingFileHandler('app.log', maxBytes=1024, backupCount=3)
该实现底层使用fcntl(Linux)或msvcrt(Windows)确保原子性操作,显著提升生产环境下的稳定性。

3.2 单进程与多进程环境下的轮转兼容性实践

在日志轮转实践中,单进程与多进程环境对文件写入和重命名的处理机制存在显著差异。为确保轮转操作的原子性和数据完整性,需采用兼容性强的策略。
信号驱动的轮转触发
多进程系统中常通过 SIGUSR1 通知各进程重新打开日志文件。每个工作进程需注册信号处理器:
signal.Notify(sigChan, syscall.SIGUSR1)
for range sigChan {
    log.Rotate()
}
该机制确保所有进程在接收到轮转信号后关闭旧文件描述符并打开新文件,避免文件句柄泄漏。
竞争条件规避
  • 使用外部协调工具(如 logrotate 配合 copytruncate)可在无进程协作时完成轮转
  • 推荐由主控进程统一触发,通过 IPC 通知子进程,保证操作时序一致性

3.3 Docker容器化部署中的日志管理挑战

在Docker容器化环境中,日志管理面临生命周期短暂、分布分散等核心问题。容器动态启停导致传统日志采集方式失效,需引入统一的日志处理机制。
日志输出模式
容器默认将日志输出至标准输出和标准错误流,可通过以下命令查看:
docker logs container_id
该方式适用于调试,但在多节点集群中难以集中分析。
集中式日志方案对比
方案优点缺点
Fluentd + Elasticsearch插件丰富,扩展性强资源消耗较高
Filebeat + Logstash轻量采集,集成ELK成熟配置复杂度高
推荐实践
  • 使用Docker logging driver(如json-file或fluentd)统一日志流向
  • 结合Kubernetes的DaemonSet部署日志代理,确保节点全覆盖

第四章:生产级日志轮转配置实战

4.1 使用RotatingFileHandler实现按大小切割

在日志管理中,当日志文件增长到一定大小时,需要自动分割以避免单个文件过大。Python 的 `logging.handlers.RotatingFileHandler` 提供了基于文件大小的切割功能。
基本配置方式
通过设置最大文件大小(`maxBytes`)和备份文件数量(`backupCount`),可实现自动轮转:
import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('rotating_logger')
handler = RotatingFileHandler('app.log', maxBytes=1024*1024, backupCount=5)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
上述代码中,`maxBytes=1048576` 表示当日志文件达到 1MB 时触发切割;`backupCount=5` 指最多保留 5 个历史日志文件(如 app.log.1 至 app.log.5),超出则覆盖最旧文件。
适用场景
  • 适用于磁盘空间有限的生产环境
  • 防止单一日志文件过大导致读取困难
  • 配合日志收集系统进行周期性归档

4.2 配置TimedRotatingFileHandler按天/小时归档

在Python的日志系统中,TimedRotatingFileHandler 是实现日志文件按时间周期自动归档的核心组件。通过合理配置,可实现按天或按小时滚动日志,有效管理磁盘空间并提升运维效率。
基本配置示例
import logging
from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger("daily_logger")
handler = TimedRotatingFileHandler(
    "app.log",
    when="midnight",      # 每天午夜切换
    interval=1,           # 间隔1天
    backupCount=7         # 保留7个备份
)
logger.addHandler(handler)
上述代码配置了每天生成一个新日志文件,保留最近7天的历史记录。参数 when="midnight" 确保归档发生在每日零点,避免日中切分造成数据碎片。
按小时归档设置
若需按小时归档,仅需调整 when 参数:
  • when="H":每小时整点切换
  • when="D":每天同一时间切换
结合 interval 可灵活定义周期长度,例如 when="H", interval=2 表示每两小时归档一次。

4.3 结合logging.config.dictConfig进行优雅配置

配置驱动的日志管理
通过 `logging.config.dictConfig`,可将日志系统配置集中于字典结构中,实现代码与配置分离。该方式支持动态加载,适用于多环境部署。
import logging.config

LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'detailed': {
            'format': '%(asctime)s [%(name)s] %(levelname)s %(message)s'
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'formatter': 'detailed',
        }
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['console']
    }
}

logging.config.dictConfig(LOGGING_CONFIG)
上述配置定义了格式化器、处理器和根日志器。`version` 必须为 1;`disable_existing_loggers` 设为 `False` 可避免禁用已有日志器;`formatters` 指定输出格式,`handlers` 绑定输出方式与级别,最终通过 `dictConfig` 应用。
优势与适用场景
  • 支持模块化配置,便于版本控制
  • 可结合 YAML 或 JSON 外部文件动态加载
  • 适用于微服务架构中的统一日志规范

4.4 自动清理旧日志文件避免磁盘溢出

在高并发服务运行中,日志文件持续增长极易导致磁盘空间耗尽。为防止此类问题,需建立自动化的日志生命周期管理机制。
基于时间的滚动与清理策略
常见的做法是结合日志框架(如 logrotate 或 zap)按天或大小切分日志,并设置保留周期。例如,以下 logrotate 配置可每日轮转并保留7天:

/var/logs/app/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}
该配置中,daily 表示每天轮转一次,rotate 7 指最多保留7个旧日志文件,超出则自动删除最老的文件,有效控制磁盘占用。
监控与告警联动
  • 通过脚本定期检查日志目录大小
  • 触发阈值时通知运维或自动执行清理
  • 结合 Prometheus 监控实现可视化预警
自动化清理不仅降低运维负担,更提升了系统的稳定性与可持续运行能力。

第五章:用1个配置拯救你的服务器存储空间

启用 Gzip 压缩,瞬间释放带宽与磁盘压力
现代 Web 服务器传输静态资源时,默认未压缩的 HTML、CSS 和 JavaScript 文件会大量占用存储与带宽。通过启用 Gzip 压缩,可将文本类资源体积减少 70% 以上。 以 Nginx 为例,只需在配置文件中添加以下指令:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024;
gzip_comp_level 6;
该配置对大于 1KB 的文本文件启用中等压缩级别,兼顾性能与压缩率。某电商网站在开启后,日均节省 CDN 流量 4.3TB,静态资源加载速度提升 40%。
哪些文件适合压缩?
并非所有文件都应被 Gzip 处理。以下是常见资源类型的处理建议:
文件类型推荐压缩说明
.html, .css, .js✅ 是文本类,压缩率高
.jpg, .png, .webp❌ 否已是压缩格式,再压缩无效
.svg✅ 是基于 XML 的文本格式
验证配置是否生效
使用 curl 检查响应头:

curl -H "Accept-Encoding: gzip" -I http://your-site.com/app.js
若返回头包含 Content-Encoding: gzip,则表示压缩已成功启用。

请求流程: 用户请求 → 服务器检测文件类型 → 匹配 gzip_types → 压缩并标记响应头 → 客户端解压使用

微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库 本文介绍了微信小程序集成蓝牙打印机时中文乱码问题的解决方案。由于打印机通常仅支持GBK/GB2312编码,而小程序使用UTF-8,导致中文显示异常。通过引入轻量级iconv-lite库进行编码转换,可高效解决该问题。文章详细说明了从库安装、编码转换到蓝牙发送的实现步骤,并提供了完整代码示例。关键注意事项包括编码验证、分段发送和兼容性测试。该方法经实际验证,能有效保障中文打印的准确性,适用于零售、物流等场景。 阅读详情

相关推荐

王珊数据库系统概论第5版视频教材

目录 隐藏 说明:本课程共包括1种电子书、84个高清视频(共68课时)、1种纸质书(赠品)。 网授课程 王珊《数据库系统概论》(第5版)网授精讲班【共68课时】 序号 名称 课时 1 第1章 绪 论(1) 00:32:25 2 第1章 绪 论(2) 00:17:03 3 第1章 绪 论(3) 00:50:19 4 第1章 绪 论(4) 00:20:37 5 第1章 绪 论(5) 00:24:47 6 第2章 关系数据库(1) 00:47:23 7 第2章 关系数据库(2) 00:14:48 8 第2章 关系

mrtaoy96的博客 1151

python logging模块的分文件存放

python 日志根据日期、日志文件大小分文件存储

qq_17328759的博客 7609

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 242

python多进程记日志

python多进程记日志缘起遇到的问题ConcurrentRotatingFileHandler合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 缘起 工作中因为需要用到多进程并记录日志,但是遇到一系列问题导致解决了很长时间 遇到的问题 当

sms鱼的博客 2176

Jupyter实战:解决ModuleNotFoundError之xgboost缺失问题

本文详细解析了在Jupyter Notebook中遇到ModuleNotFoundError: No module named 'xgboost'错误的完整解决方案。通过诊断环境、使用pip正确安装xgboost、配置Python路径以及最终验证,帮助用户彻底解决模块缺失问题,并理解Jupyter内核与Python环境的关系,提升问题排查能力。

weixin_29064103的博客 384

Python爬虫实战:基于最新技术栈的政府招标采购数据抓取与分析

对于企业、研究人员和数据分析师来说,能够高效地获取这些数据意味着可以获得宝贵的商业洞察和市场先机。随着反爬技术的不断升级和网站结构的日益复杂,传统的爬虫方法已经难以满足需求。我们将采用Selenium、Playwright等现代浏览器自动化工具,结合Scrapy框架和异步请求库,构建一个能够应对各种反爬措施的强大爬虫系统。Playwright是微软开发的浏览器自动化工具,支持Chromium、WebKit和Firefox,比Selenium更快速、更稳定。

2201_76125261的博客 1312

关于python多进程日志输出问题的解决方案

如果在多进程中直接使用RotatingFileHandler和TimedRotatingFileHandler,则容易出现PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问的问题。

qq1261275789的博客 5616

通用抓取算法AnyGrasp(Graspnet)——本地部署并测试自定义输入数据

背景:GraspNet在数据采集方面,首先将相机固定到机械臂末端,对同一个场景拍摄256个不同的角度,同时场景中的每个物体都会提前采集好3D模型,之后将其投射到仿真环境中,在仿真环境中,对抓取位姿进行打标签,如此完成数据的采集。在运行官方的测试示例时,使用的是路径下的输入数据,可以分析下。color.png(输入):rgb图像(输出):输出的生成抓取位姿的图像depth.png(输入):和当前rgb图像对应的深度图像(保存格式是单通道uint16)meta.mat。

boss-dog 1330

python 按大小切割多进程安全文件日志concurrent_log_handler.ConcurrentRotatingFileHandler性能很差

python 多进程安全切割日志

m0_38056101的博客 1776

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7533

SAP PI 系统复制,不只是把数据库拷过去,而是一次集成拓扑的重新落位

文章摘要:SAP PI/PO系统刷新生产数据到测试环境时,标准系统复制无法自动处理集成中枢特有的环境绑定问题。系统复制后,PI仍保留生产环境的连接配置,可能导致测试系统向生产环境发送消息。SAP提供的CTC模板可自动化部分后续配置,但无法替代人工对接口风险的全面评估。关键在于系统复制前绘制接口风险地图,复制后进行分层次验证:禁用生产连接、重定向测试接口、复核安全配置,并通过代表性链路测试确保系统行为符合预期。这需要结合SAP标准流程与业务语义判断,形成完整的治理闭环。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 85

python按大小,按时间分割日志,多进程安全配置。

1. 按大小分割日志 import logging import os import time from concurrent_log_handler import ConcurrentRotatingFileHandler app = Flask(__name__) # 按大小分割日志 def init_logger(app): file_dir = os.path.join(...

野草哥哥的博客 2295

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python 多进程安全日志库 ConcurrentLogHandler 简介

参考文档:https://pypi.org/project/ConcurrentLogHandler/ 这个类库是通过文件锁实现写日志进程安全的,但是只能通过文件大小控制切割,不能通过时间分割文件。 实例: def init_log(): logfile = "/data1/restful_log/restful_api_thread.log" filesize = 800*1024*1024 log = getLogger() rotate_handler = Co

whatday的专栏 3268

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Python】—日志模块logging详解 多进程日志记录

文章目录1、 问题描述2、 分析2.1 `logging`模块实现日志回滚2.2 多进程日志安全输出到同一文件方案3、解决方案3.1 使用`ConcurrentRotatingFileHandler`包3.2 对日志输出加锁3.3 重写`FileHandler`类3.4 单独进程负责日志事件3.5 `logging.SocketHandler`的方案4、参考文献 1、 问题描述 项目中,使用Rot...

ling620的专栏 6691

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python之 logging模块详细使用【转载】

  很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等; 使用logging的优势: a)你可以控制消息的级别,过滤掉那些并不重要的消息。 b)你可决定输出到什么地方,以及怎么输...

wangjinjing1984的博客 712

【亲测免费】 并发日志处理器(ConcurrentLogHandler)指南

并发日志处理器(ConcurrentLogHandler)指南 项目介绍 并发日志处理器(ConcurrentLogHandler)是一款高效且具备并发处理能力的日志记录工具,特别适用于多进程或多线程环境下的日志管理。该项目作为RotatingFileHandler的替代品,提供了一个轻量级解决方案来处理日志文件在达到一定大小时自动轮转的问题。它支持Windows和POSIX系统,允许多个进程安全...

gitblog_00387的博客 2096

python 多进程下按天分割日志handler。ConcurrentDayRotatingFileHandler

这个多进程切片安全的python按时间切割文件。官方的 TimedRotatingFileHandler 在多进程下疯狂报错,不信的话可以试试官方 TimedRotatingFileHandler 多进程写入文件日志,设置成每秒换一个新的文件写(主要是按天来切割要耽误很长的时间才能观察错误)此日志handler采用批量聚合每隔1秒写入,在超高速写入时候,写入速度远超官方。 import os ...

m0_38056101的博客 414

Python 脚本,运行日志与实际信息进行覆盖了,替换RotatingFileHandler 为ConcurrentTimedRotatingFileHandler

5、原代码使用TimedRotatingFileHandler的部分改成ConcurrentTimedRotatingFileHandler。类为线程安全,但进程不安全;数据kafka 开启了多进程将清洗的结构化数据推至相应topic,可能会导致日志覆盖。3、上传至服务器,python3 -m pip install tar包名,进行安装。

托塔天王的博客 50

【亲测免费】 concurrent_log 项目使用教程

concurrent_log 项目使用教程 1. 项目介绍 concurrent_log 是一个支持多进程和多线程环境使用的日志处理器。它提供了 ConcurrentTimedRotatingFileHandler,可以按照时间进行日志切割,并且支持在多进程和多线程环境中安全地写入日志文件。该项目的主要目的是解决在多进程环境下使用标准库 TimedRotatingFileHandler 时可能遇到...

gitblog_00707的博客 1178

python-Logging之进程安全的ConcurrentLogHandler

python logging ConcurrentLogHandler 进程安全

More and Better 1万+

Python多进程写日志ConcurrentLogHandler

文档: https://pypi.org/project/ConcurrentLogHandler/0.9.1/ 这个类库是通过文件锁实现写日志进程安全的,但是只能通过文件大小控制切割,不能通过时间分割文件。 demo: import time import logging, logging.config from cloghandler import ConcurrentRotatingFileHandler from multiprocessing import Process def

MissZhou要努力 1595

python日志,支持彩色打印和文件大小切片写入和写入mongodb

1、项目中使用了自定义的ColorHandler和MongoHandler,使用了内置的RotatingFileHandler和三方库的ConcurrentRotatingFileHandler。 支持不同logger name的日志写入不同的文件,不同logger name日志写入不同的mongodb 的collection。LogManager比较容易调用,因为里面的内部方法全都使用了下划...

m0_38056101的博客 125

python logging极简日志模块,每天按日期存储log+解决多线程问题,可直接复制使用

python logging极简日志模块,每天按日期存储log+解决多线程问题,可直接复制使用 本文解决了使用python logging遇到的问题 - 每天打印日志 - 按照日期打印日志 - 无法自动删除日志 & 日志没有分隔记录 - 多进程写入同一日志文件冲突问题 PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。

风闻有BUG 5179

Python中RotatingFileHandler、TimedRotatingFileHandler函数用法

Python中RotatingFileHandler、TimedRotatingFileHandler函数中各参数含义

weixin_42108731的博客 1691

Python 日志配置详解:使用 RotatingFileHandler 和 TimedRotatingFileHandler

以上配置通过字典方式定义了日志系统的各个组成部分,包括版本、格式化器、处理器、日志器等。最终通过方法应用该配置。

allnlei的专栏 2436
上一篇: 为什么你的HTTPX代理总是失效?深入底层原理的4个关键点
下一篇: 【Python 3D光照效果实战指南】:掌握五大核心算法,轻松实现电影级渲染效果
DebugLoom
博客等级 码龄1年 176粉丝 2107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值