Go每日一库之rotatelogs

介绍

Golang的rotatelogs库是一个用于日志轮转(log rotation)的库。日志轮转是一种常用的日志管理策略,它允许开发者将日志按照一定规则分割成多个文件,以便于管理和分析。通过使用rotatelogs库,开发者可以方便地实现日志文件的自动创建、分割和备份。

以下是关于rotatelogs库的一些关键点归纳:

  1. 目的:实现日志文件的自动轮转,避免单个日志文件过大,提高日志管理的效率和方便性。
  2. 功能:
    • 允许开发者自定义日志文件的命名规则和存储位置。
    • 支持按时间(如每天、每小时等)或文件大小来分割日志。
    • 可以设置日志文件的最大年龄(存活期),自动删除过期的日志文件。
    • 提供灵活的日志写入接口,可以与其他日志库(如logrus)配合使用。
  3. 使用方式:
    • 引入rotatelogs库,并创建一个rotatelogs.Logger实例。
    • 配置日志文件的命名规则、存储位置、轮转时间等参数。
    • rotatelogs.Logger实例与日志记录器(如logrus)绑定,实现日志的自动轮转。
  4. 优点:
    • 简单易用,通过配置即可实现复杂的日志轮转需求。
    • 高性能,基于Golang的原生特性开发,具有出色的性能和稳定性。
    • 灵活性强,可以与多种日志库配合使用,满足不同的日志管理需求。

实战

go 复制代码
package rotationLog

import (
	"path"
	"time"

	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"github.com/sirupsen/logrus"
)

const (
	baseLogDir    = "/var/log/app_log/"
	defaultJobLog = "job.log"
)

func InitLogger() error {
	baseLogFile := path.Join(baseLogDir, defaultJobLog)
	writer, err := rotatelogs.New(
		baseLogFile+".%Y_%m_%d_%H.log",               //指定文件存储的地址
		rotatelogs.WithLinkName(baseLogFile),         //指向的是现在使用的日志文件
		rotatelogs.WithMaxAge(30*24*time.Hour),       //指定单个日志文件的最长存活时间
		rotatelogs.WithRotationTime(24*time.Hour),    //指定日志的分割时间,这里是每天使用一个日志文件
	)
	if err != nil {
		logrus.Printf("failed to create rotatelogs: %s", err)
		return err
	}
	logrus.SetOutput(writer)
	return nil
}
  • "/var/log/app_log/job.log.%Y_%m_%d_%H.log": 指定文件存储的地址

  • WithLinkName: /var/log/app_log/job.log指向的是现在使用的日志文件

  • WithMaxAge: 指定单个日志文件的最长存活时间

  • WithRotationTime: 指定日志的分割时间,这里是每天使用一个日志文件

精进

[Go Package] 主流 Go 日志方案 logrus + rotatelogs + lfshook

相关推荐
HDO清风3 分钟前
CASIA-HWDB2.x 数据集DGRL文件解析(python)
开发语言·人工智能·pytorch·python·目标检测·计算机视觉·restful
2201_756989094 分钟前
C++中的事件驱动编程
开发语言·c++·算法
多米Domi01115 分钟前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
2301_8223776516 分钟前
模板元编程调试方法
开发语言·c++·算法
csbysj202019 分钟前
Python 循环嵌套
开发语言
测试_AI_一辰21 分钟前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Coding茶水间24 分钟前
基于深度学习的输电电力设备检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
清风~徐~来28 分钟前
【视频点播系统】BRpc 介绍及使用
开发语言
啟明起鸣29 分钟前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++