news 2026/3/30 20:15:57

应用日志收集与 logrotate 切割配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
应用日志收集与 logrotate 切割配置

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 前言
    • logrotate 基本用法
    • 针对应用日志的配置示例
    • Nginx 日志示例
    • Python 应用写日志的建议
    • 总结

前言

应用和 Nginx 等会持续写日志,若不切割和清理,日志文件会占满磁盘,导致服务异常。logrotate 是 Linux 下常用的日志轮转工具,可按天或按大小切割、压缩旧日志、保留最近 N 份。本文只讲 logrotate 的核心配置思路和针对应用日志的示例,不贴完整可运行 Demo。

logrotate 基本用法

logrotate 通过配置文件定义「哪些日志、如何轮转、保留多少份」。配置一般在/etc/logrotate.d/下,每个服务一个文件,主配置/etc/logrotate.conf会 include 该目录。

轮转由 cron 按天触发(如/etc/cron.daily/logrotate),也可手动执行:sudo logrotate -f /etc/logrotate.conf-f表示强制执行一次,用于测试)。

针对应用日志的配置示例

假设应用日志路径为/var/www/app/logs/app.log,希望:每天轮转、保留 7 天、压缩旧日志、轮转后由应用继续写新文件(不丢日志)。

/var/www/app/logs/*.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 deploy deploy copytruncate }

要点:

  • daily:按天轮转;也可用size 50M等按大小轮转。
  • rotate 7:保留 7 份轮转后的文件(如 app.log.1、app.log.2.gz 等),超过的删除。
  • compress:轮转后的文件用 gzip 压缩;delaycompress:最近一次轮转的文件不压缩(便于排查当天问题)。
  • missingok:日志文件不存在不报错;notifempty:空文件不轮转。
  • create 0644 deploy deploy:轮转后新建空日志文件,权限 0644,属主 deploy。若应用通过「重开文件句柄」写新文件,用 create 即可;若应用不重开句柄(只写 inode),需用copytruncate:先拷贝当前文件再清空原文件,应用继续写原文件,可能丢失拷贝与清空之间的少量日志,但无需重启应用。
  • 二选一:要么create(应用支持 SIGHUP 或重新打开日志路径),要么copytruncate(应用不重开句柄时用)。

Nginx 日志示例

/var/log/nginx/*.log { daily rotate 14 compress delaycompress missingok notifempty create 0640 nginx adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid) endscript }

sharedscripts:多文件只执行一次 postrotate。postrotate:轮转后发 USR1 让 Nginx 重新打开日志文件,避免写已轮转走的文件。若 Nginx 以 root 或 nginx 用户运行,需保证 create 的属主与 Nginx 一致。

Python 应用写日志的建议

应用侧建议按「日期或大小」切文件,便于与 logrotate 配合或替代 logrotate。例如使用 Python 的logging.handlers.TimedRotatingFileHandler

fromlogging.handlersimportTimedRotatingFileHandler handler=TimedRotatingFileHandler('/var/www/app/logs/app.log',when='midnight',interval=1,backupCount=7)

这样应用自己按天切文件并保留 7 份,若不再用 logrotate 对该路径轮转,需注意磁盘总占用。若应用只写单一文件且不重开句柄,则用 logrotate 的copytruncate更省事,无需改应用代码。

总结

  • 使用 logrotate 的daily(或 size)、rotatecompressdelaycompress控制轮转与保留。
  • 应用能重开日志句柄时用create;不能时用copytruncate,接受极少量丢失。
  • Nginx 等需在postrotate中发信号让其重新打开日志。
  • 敏感日志路径与权限(create 的属主)需与运行用户一致,避免权限错误。

按上述方式配置即可避免日志占满磁盘,并保留近期日志便于排查问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 19:42:57

2026年EOR名义雇主服务TOP5推荐榜单:揭晓灵活用工的最佳优势与解决方案

EOR名义雇主服务在企业的灵活用工方案中扮演着愈发重要的角色。这种服务允许公司在全球范围内招聘人才,而无需设立法律实体,从而大幅降低了进入新市场的复杂度。EOR名义雇主可负责法律合规、税务处理和薪资发放等繁杂事宜,确保企业遵守当地法…

作者头像 李华
网站建设 2026/3/28 21:24:08

LLM 应用开发是什么?

第 0 章:为什么现在的程序员,绕不开 LLM? 在正式开始写代码之前,我们先停下来思考一个问题: 如果你已经会写后端、前端、脚本、接口,那 LLM 对你来说到底意味着什么? 很多初学者一开始接触 LLM&…

作者头像 李华
网站建设 2026/3/21 7:49:22

计算机Java毕设实战-基于springboot的在线拍卖系统的设计与实现拍品数据、竞价记录【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/28 6:12:42

Java毕设选题推荐:基于Springboot的在线网络小说阅读网站的设计与实现基于springboot的网络阅读与写作【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华