[技术分享]日志切割(按天切割日志)

nelsonkti · · 2772 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

> 使用 `logrus` 和 ` go-file-rotatelogs` 按天切割日志,源码: [iris-framework](https://github.com/nelsonkti/iris-framework "iris-framework") ```go package config import ( config "IrisFramework/config/Log" rotatelogs "github.com/lestrrat/go-file-rotatelogs" "github.com/rifflock/lfshook" "github.com/sirupsen/logrus" "os" "path" "time" ) const LogPath = "./storage/logs" const FileSuffix = ".log" var Log = logrus.New() func InitLog() { Log.Out = os.Stdout var loglevel logrus.Level err := loglevel.UnmarshalText([]byte("info")) if err != nil { Log.Panicf("设置log级别失败:%v", err) } Log.SetLevel(loglevel) NewSimpleLogger(Log, LogPath, 8) } /** 文件日志 */ func NewSimpleLogger(log *logrus.Logger, logPath string, save uint) { lfHook := lfshook.NewHook(lfshook.WriterMap{ logrus.DebugLevel: writer(logPath, "debug", save), // 为不同级别设置不同的输出目的 logrus.InfoLevel: writer(logPath, "info", save), logrus.WarnLevel: writer(logPath, "warn", save), logrus.ErrorLevel: writer(logPath, "error", save), logrus.FatalLevel: writer(logPath, "fatal", save), logrus.PanicLevel: writer(logPath, "panic", save), }, &config.MineFormatter{}) log.AddHook(lfHook) } /** 文件设置 */ func writer(logPath string, level string, save uint) *rotatelogs.RotateLogs { logFullPath := path.Join(logPath, level) var cstSh, _ = time.LoadLocation("Asia/Shanghai") //上海 fileSuffix := time.Now().In(cstSh).Format("2006-01-02") + FileSuffix logier, err := rotatelogs.New( logFullPath+"-"+fileSuffix, rotatelogs.WithLinkName(logFullPath), // 生成软链,指向最新日志文件 rotatelogs.WithRotationCount(int(save)), // 文件最大保存份数 rotatelogs.WithRotationTime(time.Hour*24), // 日志切割时间间隔 ) if err != nil { panic(err) } return logier } ``` ### 自定义日志输出格式 ```go package config import ( "fmt" "github.com/sirupsen/logrus" "strings" "time" ) type MineFormatter struct{} const TimeFormat = "2006-01-02 15:04:05" func (s *MineFormatter) Format(entry *logrus.Entry) ([]byte, error) { msg := fmt.Sprintf("[%s] [%s] %s\n", time.Now().Local().Format(TimeFormat), strings.ToUpper(entry.Level.String()), entry.Message) return []byte(msg), nil } ``` 打印输出如下: ``` [2020-08-05 11:34:08] [INFO] [gorm] [sql] [1.604712ms] SELECT * FROM `user` WHERE `user`.`deleted_at` IS NULL AND ((username like ?)) []interface {}{"%风%"} ``` ![【技术分享】日志切割(按天切割日志)](https://cdn.learnku.com/uploads/images/202008/14/28119/DkL7lvAxLQ.png!large)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2772 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传