–
在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...) }
–
评论前必须登录!
注册