1.装置zap

go get go.uber.org/zapgo get github.com/natefinch/lumberjack  //日志文件宰割包

2.根本应用

func main() {    logger, _ := zap.NewProduction() //生产环境实例    defer logger.Sync()   //将缓存中的日志同步到文件中    url := "http://xiayuedu.com"    logger.Info("info",                 //info级别的日志        zap.String("url",url),        zap.Bool("bool",true),    )    logger.Info("info",        zap.Namespace("namespace-1"),   //定义多级日志        zap.String("url",url),          //应用对应的类型        zap.Bool("bool",true),    )    logger.Info("info",        zap.Namespace("namespace-2"),        zap.String("url",url),        zap.Bool("bool",true),        )    logger.Error("password is error",       //error级别        zap.String("username","zhangsan"),         zap.String("password","123456"),      )    logger.Debug("record user info",      //debug级别        zap.String("username","zhangsan"),        zap.String("password","123456"),    )    sugar := logger.Sugar()             //应用非zap.xxxx类型进行输入,性能较低,非核心代码处能够应用    sugar.Info("sugar info",true,"123q342534",time.Second)    sugar.Error("sugar info",true,"123q342534",time.Second)    sugar.Debug("sugar info",true,"123q342534",time.Second)    sugar.Warn("sugar info",true,"123q342534",time.Second)}

输入后果

{"level":"info","ts":1627910714.8048513,"caller":"golangdemo/main.go:357","msg":"info","url":"http://xiayuedu.com","bool":true}{"level":"info","ts":1627910714.805827,"caller":"golangdemo/main.go:361","msg":"info","namespace-1":{"url":"http://xiayuedu.com","bool":true}}{"level":"info","ts":1627910714.806803,"caller":"golangdemo/main.go:366","msg":"info","namespace-2":{"url":"http://xiayuedu.com","bool":true}}{"level":"error","ts":1627910714.806803,"caller":"golangdemo/main.go:371","msg":"password is error","username":"zhangsan","password":"123456","stacktrace":"main.main\n\tC:/Users/admin/xiayuedu/golangdemo/main.go:371\nruntime.main\n\tC:/Program Files/Go/src/runtime/proc.go:203"}{"level":"info","ts":1627910714.8077793,"caller":"golangdemo/main.go:381","msg":"sugar infotrue123q3425341s"}{"level":"error","ts":1627910714.8077793,"caller":"golangdemo/main.go:382","msg":"sugar infotrue123q3425341s","stacktrace":"main.main\n\tC:/Users/admin/xiayuedu/golangdemo/main.go:382\nruntime.main\n\tC:/Program Files/Go/src/runtime/proc.go:203"}{"level":"warn","ts":1627910714.8087556,"caller":"golangdemo/main.go:384","msg":"sugar infotrue123q3425341s"}

3.定制化应用

拷贝来自https://www.jianshu.com/p/910...,大佬写的很不错很具体,能够满足生产应用

import (    "fmt"    "github.com/natefinch/lumberjack"    "go.uber.org/zap"    "go.uber.org/zap/zapcore"    "os"    "net/http")var log *zap.Loggerfunc main() {    var coreArr []zapcore.Core    //获取编码器    encoderConfig := zap.NewProductionEncoderConfig()               //NewJSONEncoder()输入json格局,NewConsoleEncoder()输入一般文本格式    encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder           //指定工夫格局    encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder    //按级别显示不同色彩,不需要的话取值zapcore.CapitalLevelEncoder就能够了    //encoderConfig.EncodeCaller = zapcore.FullCallerEncoder        //显示残缺文件门路    encoder := zapcore.NewConsoleEncoder(encoderConfig)    //日志级别    highPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool{  //error级别        return lev >= zap.ErrorLevel    })    lowPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {  //info和debug级别,debug级别是最低的        return lev < zap.ErrorLevel && lev >= zap.DebugLevel    })    //info文件writeSyncer    infoFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{        Filename:   "./log/info.log",   //日志文件寄存目录,如果文件夹不存在会主动创立        MaxSize:    2,                  //文件大小限度,单位MB        MaxBackups: 100,                //最大保留日志文件数量        MaxAge:     30,                 //日志文件保留天数        Compress:   false,              //是否压缩解决    })    infoFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(infoFileWriteSyncer,zapcore.AddSync(os.Stdout)), lowPriority) //第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志    //error文件writeSyncer    errorFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{        Filename:   "./log/error.log",      //日志文件寄存目录        MaxSize:    1,                      //文件大小限度,单位MB        MaxBackups: 5,                      //最大保留日志文件数量        MaxAge:     30,                     //日志文件保留天数        Compress:   false,                  //是否压缩解决    })    errorFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(errorFileWriteSyncer,zapcore.AddSync(os.Stdout)), highPriority) //第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志    coreArr = append(coreArr, infoFileCore)    coreArr = append(coreArr, errorFileCore)    log = zap.New(zapcore.NewTee(coreArr...), zap.AddCaller()) //zap.AddCaller()为显示文件名和行号,可省略    log.Info("hello info")    log.Debug("hello debug")    log.Error("hello error")}