路漫漫其修远兮
吾将上下而求索

go学习:logrus使用

在gin的应用中,有两个日志需要记录

一个是访问日志,用户每次访问的记录,debug模式,可以是json,也可以是text,单独一个日志文件

一个是自定义日志,用于调试信息展示,可调整级别,可以是json,也可以是text,单独一个日志文件

在设计过程中,需要将gin的错误输出和标准输出重定向到自定义日志文件中,gin的panic和recovery输出,正常的访问输出

在设计过程中,需要将系统的错误输出和标准输出重定向到自定义日志文件中,比如fmt.print,正常的调用日志接口输出

经过上面配置后,基本可以实现所有输出都到文件里面了

下面是一个例子

gin使用logrus
package main

import (
   "os"

   "github.com/gin-gonic/gin"

   "github.com/sirupsen/logrus"
)

var log = logrus.New() // 创建一个log示例

func initLogrus() (err error) { // 初始化log的函数
   log.Formatter = &logrus.JSONFormatter{}                                       // 设置为json格式的日志
   f, err := os.OpenFile("./zdc.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) // 创建一个log日志文件
   if err != nil {
      return
   }
   log.Out = f                  // 设置log的默认文件输出
   gin.SetMode(gin.ReleaseMode) // 线上模式,控制台不会打印信息
   gin.DefaultWriter = log.Out  // gin框架自己记录的日志也会输出
   log.Level = logrus.InfoLevel // 设置日志级别
   return
}

func main() {
   err := initLogrus()
   if err != nil {
      panic(err)
   }

   r := gin.Default()
   r.GET("/index", func(c *gin.Context) {
      log.WithFields(logrus.Fields{
         "msg": "测试的错误",
      }).Warn("这是一个warnning级别的日志")

      c.JSON(200, gin.H{
         "code": 0,
         "data": gin.H{
            "name": "zdc",
            "age":  18,
         },
      })
   })
   _ = r.Run()
}
log文件:
{"fields.msg":"测试的错误","level":"warning","msg":"这是一个warnning级别的日志","time":"2019-08-28T18:49:07+08:00"}[GIN] 2019/08/28 - 18:49:07 | 200 |     20.0011ms |       127.0.0.1 | GET      /index
{"fields.msg":"测试的错误","level":"warning","msg":"这是一个warnning级别的日志","time":"2019-08-28T18:49:09+08:00"}[GIN] 2019/08/28 - 18:49:09 | 200 |            0s |       127.0.0.1 | GET      /index

https://www.cnblogs.com/shuchengyi/p/11425767.html

下面是另外一个示例

1、安装
go get github.com/sirupsen/logrus

2、Logrus特性
六种日志级别:
logrus.Debug("Useful debugging information.")logrus.Info("Something noteworthy happened!")logrus.Warn("You should probably take a look at this.")logrus.Error("Something failed but I'm not quitting.")logrus.Fatal("Bye.")   //log之后会调用os.Exit(1)logrus.Panic("I'm bailing.")   //log之后会panic()

3、log参数配置,定义输出、格式或者日志级别等
func init() {
    // 设置日志格式为json格式 自带的只有两种样式logrus.JSONFormatter{}和logrus.TextFormatter{}
    log.SetFormatter(&log.JSONFormatter{})

    // 设置将日志输出到标准输出(默认的输出为stderr,标准错误)
    // 日志消息输出可以是任意的io.writer类型
    log.SetOutput(os.Stdout)

    // 设置日志级别为warn以上
    log.SetLevel(log.WarnLevel)}

4、常规使用
package mainimport (
  log "github.com/sirupsen/logrus")func main() {
  log.WithFields(log.Fields{
    "animal": "walrus",
  }).Info("A walrus appears")}

5、logrus实例
package main
import (
    "github.com/sirupsen/logrus"
    "os")// logrus提供了New()函数来创建一个logrus的实例。// 项目中,可以创建任意数量的logrus实例。var log = logrus.New()func main() {
    // 为当前logrus实例设置消息的输出,同样地,
    // 可以设置logrus实例的输出到任意io.writer
    log.Out = os.Stdout    // 为当前logrus实例设置消息输出格式为json格式。
    // 同样地,也可以单独为某个logrus实例设置日志级别和hook,这里不详细叙述。
    log.Formatter = &logrus.JSONFormatter{}

    log.WithFields(logrus.Fields{
    "animal": "walrus",
    "size":   10,
    }).Info("A group of walrus emerges from the ocean")}

6、Fields
entry := logrus.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})entry.Info("something happened on that request") entry.Warn("something not great happened")

7、Entry
logrus.WithFields会自动返回一个 *Entry,Entry里面的有些变量会被自动加上
time:entry被创建时的时间戳msg:在调用.Info()等方法时被添加
level

下面还有一个例子,里面包含了自定义字段,日志滚动等

https://www.cnblogs.com/xinliangcoder/p/11212573.html

下面是具体的示例

package logging

import (
   "github.com/gin-gonic/gin"
   "github.com/sirupsen/logrus"
   "go-log_server/pkg/file"
   "go-log_server/pkg/setting"
   "log"
   "os"
)

var accessLog = logrus.New()
var customLog = logrus.New()

func CustomLogSetup() {
   filePath := getLogFilePath()
   fileName := getCustomLogFileName()
   F, err := file.MustOpen(fileName, filePath)
   if err != nil {
      log.Fatalf("logging.Setup err: %v", err)
   }

   customLog.Formatter = &logrus.TextFormatter{
      TimestampFormat: "2006-01-02 15:04:05",
   }
   customLog.Out = F
   customLog.Level = logrus.InfoLevel

   os.Stdout = F
   os.Stderr = F

   switch setting.LogSetting.LogLevel {
   case "debug":
      customLog.Level = logrus.DebugLevel
   case "info":
      customLog.Level = logrus.InfoLevel
   case "warning":
      customLog.Level = logrus.WarnLevel
   case "error":
      customLog.Level = logrus.ErrorLevel
   default:
      customLog.Fatalf("log mode unknown: " + setting.LogSetting.LogLevel)
   }

}

func AccessLogSetup() {
   filePath := getLogFilePath()
   fileName := getAccessLogFileName()
   F, err := file.MustOpen(fileName, filePath)
   if err != nil {
      log.Fatalf("logging.Setup err: %v", err)
   }

   accessLog.Formatter = &logrus.TextFormatter{
      TimestampFormat: "2006-01-02 15:04:05",
   }
   accessLog.Out = F

   gin.SetMode(gin.DebugMode)
   gin.DefaultWriter = accessLog.Out
   gin.DefaultErrorWriter = accessLog.Out

}

func Setup() {
   CustomLogSetup()
   AccessLogSetup()
}

func Debugf(format string, args ...interface{}) {
   customLog.Logf(logrus.DebugLevel, format, args...)
}

func Infof(format string, args ...interface{}) {
   customLog.Logf(logrus.InfoLevel, format, args...)
}

func Warnf(format string, args ...interface{}) {
   customLog.Logf(logrus.WarnLevel, format, args...)
}

func Errorf(format string, args ...interface{}) {
   customLog.Logf(logrus.ErrorLevel, format, args...)
}

func Fatalf(format string, args ...interface{}) {
   customLog.Logf(logrus.FatalLevel, format, args...)
   customLog.Exit(1)
}

func Debug(args ...interface{}) {
   customLog.Log(logrus.DebugLevel, args...)
}

func Info(args ...interface{}) {
   customLog.Log(logrus.InfoLevel, args...)
}

func Warn(args ...interface{}) {
   customLog.Log(logrus.WarnLevel, args...)
}

func Error(args ...interface{}) {
   customLog.Log(logrus.ErrorLevel, args...)
}

func Debugln(args ...interface{}) {
   customLog.Logln(logrus.DebugLevel, args...)
}

func Infoln(args ...interface{}) {
   customLog.Logln(logrus.InfoLevel, args...)
}

func Warnln(args ...interface{}) {
   customLog.Logln(logrus.WarnLevel, args...)
}

func Errorln(args ...interface{}) {
   customLog.Logln(logrus.ErrorLevel, args...)
}

未经允许不得转载:江哥架构师笔记 » go学习:logrus使用

分享到:更多 ()

评论 抢沙发

评论前必须登录!