老师,您好,如果配置了日志文件和滚动,日志信息就无法输出到控制台了,这样该怎么办呢?

来源:4-9 基础实施层-log starter 编码

慕娘5059038

2019-06-15

写回答

2回答

Schwarzeni

2019-10-18

可以使用logrus的hook,下面是我的代码,日志打印到项目根目录的logs文件夹下,需要提前执行命令安装第三方库

go get -u github.com/rifflock/lfshook
go get -u github.com/lestrrat-go/file-rotatelogs

然后再使用formatter时关闭颜色输出,完整的文件如下

package base

import (
   "time"

   "github.com/rifflock/lfshook"

   rotatelogs "github.com/lestrrat-go/file-rotatelogs"
   "github.com/pkg/errors"
   log "github.com/sirupsen/logrus"
   prefixed "github.com/x-cray/logrus-prefixed-formatter"
)

func init() {
   // 命令行日志格式
   stdFormatter := &prefixed.TextFormatter{
      FullTimestamp:   true,
      TimestampFormat: "2006-01-02.15:04:05.000000",
      ForceFormatting: true,
      ForceColors:     true,
      DisableColors:   false,
   }
   log.SetFormatter(stdFormatter)
   // 日志级别
   log.SetLevel(log.DebugLevel)
   // 日志文件和滚动配置
   writer, err := rotatelogs.New(
      "logs/console.log"+".%Y%m%d%H%M",
      //rotatelogs.WithLinkName("logs/console.log"), // 生成软链,指向最新日志文件
      rotatelogs.WithMaxAge(7*24*time.Hour),     // 文件最大保存时间
      rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔
   )
   if err != nil {
      log.Errorf("config local file system logger error. %v", errors.WithStack(err))
   }

   // 文件输出格式
   fileFormatter := &prefixed.TextFormatter{
      FullTimestamp:   true,
      TimestampFormat: "2006-01-02.15:04:05.000000",
      ForceFormatting: true,
      ForceColors:     false,
      DisableColors:   true,
   }
   lfHook := lfshook.NewHook(lfshook.WriterMap{
      log.InfoLevel:  writer,
      log.ErrorLevel: writer,
   }, fileFormatter)
   log.AddHook(lfHook)

   log.Info("测试")
   log.Debug("测试")
}


0
13
Schwarzeni
回复
只为编程
emmmmm
2019-11-02
共13条回复

枫荇

2019-06-19

这个问题,@qq_清风欲叶_klO389看能不能附上问题代码,具体问题来具体分析了,只从现象也很难确定。

0
0

仿微信抢红包 Golang实战多版本抢红包系统

Golang红包系统单体版+并发版+分布式+微服务版,四大金装版、超值必修课

582 学习 · 159 问题

查看课程