集成gin 、zap和lumberjack
生活随笔
收集整理的這篇文章主要介紹了
集成gin 、zap和lumberjack
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** @author:David Ma* @date:2021-02-01*/package mylogimport ("go.uber.org/zap""go.uber.org/zap/zapcore""gopkg.in/natefinch/lumberjack.v2""os"
)/*** 獲取日志對象* filePath 日志文件路徑* level 日志級別* maxSize 每個日志文件保存的最大尺寸 單位:M* maxBackups 日志文件最多保存多少個備份* maxAge 文件最多保存多少天* compress 是否壓縮* serviceName 服務名*/
func NewLogger(filePath string, level zapcore.Level, maxSize int,maxBackups int, maxAge int, compress bool, serviceName string) *zap.Logger{core := newCore(filePath, level, maxSize, maxBackups, maxAge, compress)//開啟文件和行號caller := zap.AddCaller()//開啟開發者模式,也就是stacktracedevelopment := zap.Development()//往log中追加額外的信息(要求是<k,v>類型)opts := zap.Fields(zap.String("service",serviceName))logger := zap.New(core, caller, development, opts)return logger
}/** * 構建zapcore*/
func newCore(filePath string, level zapcore.Level, maxSize int,maxBackups int, maxAge int, compress bool) zapcore.Core{//利用lumberjack注冊一個hook也就是一個可以進行分割的loggerhook := lumberjack.Logger{Filename: filePath, //文件路徑MaxSize: maxSize, //每個日志文件的大小,單位:MMaxBackups: maxBackups, //每個日志文件的備份的個數MaxAge: maxAge, //每個日志文件的保留時長,單位:天Compress: compress,}//自定義一個編碼器encoderencoder := zapcore.NewJSONEncoder(zapcore.EncoderConfig{MessageKey: "msg",LevelKey: "level",TimeKey: "time",NameKey: "name",CallerKey: "lines", //在日志中lines這個<k,v>對的value表示的即為觸發將msg寫在log的代碼所在的文件及行號FunctionKey: "func",StacktraceKey: "stacktrace", //development mode下生效LineEnding: zapcore.DefaultLineEnding, //日志每一行的結尾默認為換行符'\n'EncodeLevel: zapcore.LowercaseColorLevelEncoder, //小寫且自帶顏色的編碼器EncodeTime: zapcore.ISO8601TimeEncoder, //ISO8601 UTC 時間格式EncodeDuration: zapcore.SecondsDurationEncoder, //編碼的所需時間EncodeCaller: zapcore.FullCallerEncoder, //全路徑編碼器EncodeName: zapcore.FullNameEncoder,ConsoleSeparator: " ",})core := zapcore.NewCore(encoder, //編碼器zapcore.NewMultiWriteSyncer(os.Stdout,zapcore.AddSync(&hook)), //打印到控制臺和文件level, //日志級別)return core
}
/*** @author:David Ma* @date:2021-02-01*/package controllerimport ("github.com/gin-contrib/zap""github.com/gin-gonic/gin""go.uber.org/zap""go.uber.org/zap/zapcore""miaosha/src/mylog""miaosha/src/util""time"
)func SetUpRounter() *gin.Engine {r := gin.New()filePath := util.GetRootDir()+"/userLocal/test.log"//if _,err := os.Create(filePath); err != nil{// zap.L().Error(err.Error())//}logger := mylog.NewLogger(filePath,zapcore.DebugLevel,64,3,7,true,"MiaoSha")// 將自定義的logger替換為全局的loggerzap.ReplaceGlobals(logger)// 使用zap日志庫r.Use(ginzap.Ginzap(zap.L(), time.RFC3339, true))r.Use(ginzap.RecoveryWithZap(zap.L(), true))//告訴router要讀取的模板文件的位置,都是從項目的根路徑開始,如果templates文件夾下有多級目錄(這里是二級目錄,且用**表示模糊匹配),則必須修改pattern參數來匹配://且在對應的handlerfunction中,對應跳轉的html的文件名也需要給指定路徑(比如:user/login),而且在對應的html模板中也需要相應處理r.LoadHTMLGlob("templates/**/*")//指定渲染頁面時所需要使用到的靜態文件,//@parm:relativePath:表示在html中所有請求路徑為/static(也就是這里的/static跟/user類似,相當于一個URI)下的資源均從@parm:root所表示的項目路徑下來找//且一般保持/static和static文件夾名一致,方便找,也可以不一致r.Static("/static", "static")return r
}
總結
以上是生活随笔為你收集整理的集成gin 、zap和lumberjack的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次路由器频繁掉线问题的分析、解决与发
- 下一篇: html奥运五环