【GO】rotatelogs库和sirupsen/logrus库实现日志功能的实践用例

_苏沐 2024-06-27 11:05:02 阅读 57

“github.com/sirupsen/logrus” 是一个 Go 语言的日志库,它提供了一种简单、灵活的方式来记录日志。该库的主要特点包括:

支持多种日志输出目标,如控制台、文件等。

支持日志轮转,可以按照时间或文件大小进行轮转。

支持日志格式化,可以根据需要自定义日志格式。

支持异步日志记录,可以提高日志记录性能。

使用 “github.com/sirupsen/logrus” 库的基本步骤如下:

导入 “github.com/sirupsen/logrus” 包。

创建一个日志记录器(Logger),可以选择性地设置输出目标、日志轮转策略、日志格式等。

使用日志记录器的 Printf、Println、Fatalf、Fatalln 等方法记录日志。

将rotatelogs.Logger和上述库连用,示例

package log

import (

rotatelogs "github.com/lestrrat-go/file-rotatelogs"

"github.com/sirupsen/logrus"

"testing"

"time"

)

type RotateLogsHandler struct {

logger *rotatelogs.RotateLogs

}

func NewRotateLogsHandler() (*RotateLogsHandler, error) {

logFilePath := "./"

logFileName := "rotatelog"

rl, err := rotatelogs.New(

logFilePath+logFileName+".%Y%m%d.log",

rotatelogs.WithLinkName(logFileName),

rotatelogs.WithMaxAge(7*24*time.Hour),

rotatelogs.WithRotationTime(24*time.Hour),

)

if err != nil {

return nil, err

}

return &RotateLogsHandler{ logger: rl}, nil

}

func (h *RotateLogsHandler) Fire(entry *logrus.Entry) error {

line, err := entry.String()

if err != nil {

return err

}

_, err = h.logger.Write([]byte(line))

return err

}

func (h *RotateLogsHandler) Levels() []logrus.Level {

return logrus.AllLevels

}

func TestRotatelogs(t *testing.T) {

// 创建自定义日志处理器

handler, err := NewRotateLogsHandler()

if err != nil {

panic(err)

}

// 将自定义日志处理器添加到日志记录器中

logger := logrus.New()

logger.Hooks.Add(handler)

// 使用日志记录器

logger.Info("Hello, world!")

}

运行以上代码,文件目录会出现以下日志文件。

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。