golang之日志分割

自己学习记录,可以分享给大家,如有不对或不足之处请勿喷!

日志分割和日志钩子框架是使用开源三方的名字叫:file-rotatelogs,lfshook

hook.go

package mlog

import (
    rotatelogs "github.com/lestrrat-go/file-rotatelogs"
    "github.com/rifflock/lfshook"
    "github.com/sirupsen/logrus"
    "time"
)

func NewLfsHook(logName string, maxRemainCnt uint) logrus.Hook {

    writer, err := rotatelogs.New(
        logName+".%Y%m%d",
        //logName+".%Y%m%d%H%M",
        // WithLinkName为最新的日志建立软连接,以方便随着找到当前日志文件
        rotatelogs.WithLinkName(logName),

        // WithRotationTime设置日志分割的时间,这里设置为一小时分割一次
        rotatelogs.WithRotationTime(24*time.Hour),

        // WithMaxAge和WithRotationCount二者只能设置一个,
        // WithMaxAge设置文件清理前的最长保存时间,
        // WithRotationCount设置文件清理前最多保存的个数。
        //rotatelogs.WithMaxAge(time.Hour*24),
        rotatelogs.WithRotationCount(maxRemainCnt),
    )

    if err != nil {
        logrus.Panicf("日志文件配置错误,无法记录日志: %v", err)
    }

    logrus.SetLevel(logrus.InfoLevel)

    lfsHook := lfshook.NewHook(lfshook.WriterMap{
        logrus.DebugLevel: writer,
        logrus.InfoLevel:  writer,
        logrus.WarnLevel:  writer,
        logrus.ErrorLevel: writer,
        logrus.FatalLevel: writer,
        logrus.PanicLevel: writer,
    }, &logrus.TextFormatter{DisableColors: true})

    return lfsHook
}

程序入口:main.go

package main

import (
    "github.com/sirupsen/logrus"
    "server/mlog"
    
)


//入口
func main() {
    fileSplitWriter := mlog.NewLfsHook("./logs/gin.log", 7)
    logrus.AddHook(fileSplitWriter)


}

结果:就会在logs/目录下面生成对应日期切割日志

 如何自定义日志可以查阅网上子类很多,或者我的博客里面也记录了!

 

posted @ 2023-04-26 16:43  努力乄小白  阅读(611)  评论(0编辑  收藏  举报