如何使用Golang实现日志文件轮转_按日期或大小切分日志


Go 标准库 log 不支持日志轮转,需用第三方库:lumberjack 适合按大小轮转(如 100MB/个,保留 7 个+28 天),file-rotatelogs 适合按日期轮转(如 daily,带软链和精确时间控制)。

如何使用golang实现日志文件轮转_按日期或大小切分日志

Go 标准库的 log 包本身不支持日志轮转(如按日期或文件大小自动切分),需借助第三方库或手动实现。最常用、稳定且轻量的方案是使用 github.com/lestrrat-go/file-rotatelogs(推荐)或 gopkg.in/natefinch/lumberjack.v2。下面分别说明两种主流方式,覆盖按时间(日期)和按大小轮转的典型场景。

使用 lumberjack 实现按大小自动轮转

适合:对日志时效性要求不高,更关注单个文件体积控制(如限制每个日志 ≤ 100MB,最多保留 7 个旧文件)

lumberjack 是一个简单可靠的日志切割器,常与标准 logzap 等搭配使用:

  • 安装:go get gopkg.in/natefinch/lumberjack.v2
  • 基本用法示例(配合标准 log):
import (
    "log"
    "os"
    "gopkg.in/natefinch/lumberjack.v2"
)

func main() {
    logger := log.New(&lumberjack.Logger{
        Filename:   "./logs/app.log",
        MaxSize:    100, // MB
        MaxBackups: 7,   // 最多保留 7 个旧文件
        MaxAge:     28,  // 保留 28 天(即使没到 MaxBackups)
        Compress:   true, // 启用 gzip 压缩(.gz)
    }, "", log.LstdFlags)

    logger.Println("This is a log message")
}

注意:MaxAgeMaxBackups 是独立触发条件,任一满足即清理旧日志;Compress=true 会自动压缩归档文件(需 Go 1.16+)。

使用 file-rotatelogs 实现按日期轮转(如 daily)

适合:需要严格按日期归档(如 app-2025-05-20.log),便于按天检索、对接日志系统

千鹿Pr助手 千鹿Pr助手

智能Pr插件,融入众多AI功能和海量素材

千鹿Pr助手 163 查看详情 千鹿Pr助手

file-rotatelogs 支持基于时间的精确轮转(秒/分/时/日),并可结合 logruszap 使用:

  • 安装:go get github.com/lestrrat-go/file-rotatelogs
  • 搭配标准 log 示例(按天切分):
import (
    "log"
    "time"
    rotatelogs "github.com/lestrrat-go/file-rotatelogs"
    "gopkg.in/natefinch/lumberjack.v2" // 可选:仅用于压缩,rotatelogs 本身不压缩
)

func main() {
    writer, _ := rotatelogs.New(
        "./logs/app-%Y-%m-%d.log", // 模板:%Y=年,%m=月,%d=日
        rotatelogs.WithLinkName("./logs/app.log"), // 创建软链指向最新日志
        rotatelogs.WithRotationTime(24*time.Hour), // 每 24 小时轮转一次
        rotatelogs.WithMaxAge(7*24*time.Hour),     // 保留最近 7 天
        rotatelogs.WithRotationCount(7),           // 最多存 7 个文件(与 MaxAge 二者取严)
    )

    logger := log.New(writer, "", log.LstdFlags)
    logger.Println("Log written to dated file")
}

提示:WithLinkName 很实用——始终有 app.log 软链接指向当天日志,方便 tail -f;若需压缩,可额外用 lumberjack 封装 writer,或自行调用 os/exec 执行 gzip。

进阶建议:生产环境推荐组合方案

单一工具难兼顾所有需求。实际项目中建议:

  • 优先用 lumberjack:简单、无依赖、稳定,适合大多数后端服务
  • 如需精确日期命名 + 软链 + 高频轮转(如每小时),选 file-rotatelogs
  • 避免自己实现轮转逻辑:边界情况多(并发写、rename 冲突、磁盘满处理等),易出错
  • 日志路径务必使用绝对路径或确保工作目录可控,防止日志写入意外位置
  • 配合 systemd 或 supervisor 时,记得关闭其自带日志重定向,避免双重日志

小技巧:快速验证轮转是否生效

启动程序后,执行以下操作观察行为:

  • 手动修改系统时间(测试 date-based 轮转)或快速写满设定大小(如设 MaxSize=1,反复打印)
  • 检查日志目录:是否有新文件生成、旧文件是否重命名、软链是否更新
  • ls -lt logs/ 看文件时间顺序,tail -f logs/app.log 确认输出流向正确文件

以上就是如何使用Golang实现日志文件轮转_按日期或大小切分日志的详细内容,更多请关注其它相关文章!


# go  # github  # golang  # app  # 工具  # 后端  # ai  # git  # 花都旅游口碑营销推广  # 网站推广相关知识  # 红酒seo怎么做  # seo爵士舞  # 潍坊网站推广行者seo06  # 开平seo搜索排名公司  # 辽宁整站seo优化  # 肇庆企业网站推广软件  # 帐篷如何营销推广文案  # 建网站后如何推广产品  # 内网  # 何为  # 第三方  # 不支持  # 最多  # 个旧  # 如何使用  # 按日  # 切分  # 标准库 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  基于键值条件高效映射 Pandas DataFrame 多列数据  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  在PySimpleGUI中实现键盘按键绑定按钮事件  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  QQ邮箱PC端登录页面_QQ邮箱网页版登录界面  《合金装备4》有望推出重制版!制作人发话了  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  我居然低估了 DeepSeek,这次更新它做到了这些!  韩小圈网页版PC端入口 韩小圈网页版官方网站入口  《撕歌》会员开通方法  铁路12306官网入口 铁路12306中国铁路官网登录首页  免费占卜在线神算_免费占卜手机神算  CSS如何控制元素外边距_margin实现布局间隔  b站网页版入口 哔哩哔哩官方网站直接进入  Python定时发送QQ消息  火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解  《偃武》甘宁技能详解  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  WPS文字如何进行简繁转换  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  《火花chat》搜索好友方法  J*aScript桌面应用_Electron多进程架构实战  VS Code快捷键when上下文子句的妙用  德邦快递收费标准详解  《小宇宙》标记不友善评论方法  快手缓存清理方法  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  excel怎么制作考勤表 excel考勤模板与函数公式讲解  Go App Engine 项目结构与包管理深度指南  驱动人生:游戏修复指南  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南  C++如何实现单例模式_C++线程安全的单例模式写法  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  风神瞳获取全攻略  可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接  PHP utf8_encode 字符编码转换陷阱与解决方案  Win11如何分屏操作_Win11多窗口分屏技巧  Apple Music无故扣费引质疑  解决异步Python机器人中同步操作的阻塞问题  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤 

 2025-12-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.