日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go语言记录日志uber-go/zap/lumberjack的用法

發布時間:2023/12/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go语言记录日志uber-go/zap/lumberjack的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 需求分析

  • 日志切割能夠根據文件大小、時間或間隔等來切割日志文件;
  • 支持不同的日志級別,例如 DEBUG , INFO , WARN , ERROR 等;
  • 能夠打印基本信息,如調用文件、函數名和行號,日志時間等;
  • 根據時間或者天數來保存日志信息

1 環境安裝

go get -u go.uber.org/zap go get -v github.com/uber-go/atomic go get -v github.com/uber-go/multierr go get -uv github.com/natefinch/lumberjack

如果安裝失敗,就將我GitHub上的安裝包go.uber.org解壓后拷貝到 GOPATH/src 下,整個測試用例也在github上
GitHub地址

https://github.com/taw19960426/learning-go-language/tree/main/uber-go 在這里插入代碼片

2 參考博客
這里面寫得很詳細

https://blog.csdn.net/wohu1104/article/details/107326794

3 結果展示

4 源代碼

main.go

package mainimport ("time""go.uber.org/lumberjack""go.uber.org/zap""go.uber.org/zap/zapcore" )var logger *zap.Logger// logpath 日志文件路徑 // loglevel 日志級別 func InitLogger(logpath string, loglevel string) {// 日志分割hook := lumberjack.Logger{Filename: logpath, // 日志文件路徑,默認 os.TempDir()MaxSize: 1, // 每個日志文件保存1M,默認 100MMaxBackups: 30, // 保留30個備份,默認不限MaxAge: 7, // 保留7天,默認不限Compress: true, // 是否壓縮,默認不壓縮}write := zapcore.AddSync(&hook)// 設置日志級別// debug 可以打印出 info debug warn// info 級別可以打印 warn info// warn 只能打印 warn// debug->info->warn->errorvar level zapcore.Levelswitch loglevel {case "debug":level = zap.DebugLevelcase "info":level = zap.InfoLevelcase "error":level = zap.ErrorLeveldefault:level = zap.InfoLevel}encoderConfig := zapcore.EncoderConfig{TimeKey: "time",LevelKey: "level",NameKey: "logger",CallerKey: "linenum",MessageKey: "msg",StacktraceKey: "stacktrace",LineEnding: zapcore.DefaultLineEnding,EncodeLevel: zapcore.LowercaseLevelEncoder, // 小寫編碼器EncodeTime: zapcore.ISO8601TimeEncoder, // ISO8601 UTC 時間格式EncodeDuration: zapcore.SecondsDurationEncoder, //EncodeCaller: zapcore.FullCallerEncoder, // 全路徑編碼器EncodeName: zapcore.FullNameEncoder,}// 設置日志級別atomicLevel := zap.NewAtomicLevel()atomicLevel.SetLevel(level)core := zapcore.NewCore(// zapcore.NewConsoleEncoder(encoderConfig),zapcore.NewJSONEncoder(encoderConfig),// zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&write)), // 打印到控制臺和文件write,level,)// 開啟開發模式,堆棧跟蹤caller := zap.AddCaller()// 開啟文件及行號development := zap.Development()// 設置初始化字段,如:添加一個服務器名稱filed := zap.Fields(zap.String("serviceName", "192.168.1.199"))// 構造日志 如果不需要一些參數可以刪除logger = zap.New(core, caller, development, filed)//logger = zap.New(core, development)logger.Info("DefaultLogger init success") }func main() {// 歷史記錄日志名字為:my.log,服務重新啟動,日志會追加,不會刪除InitLogger("./logs/my.log", "debug")// 強結構形式logger.Info("test",zap.String("string", "xiaotang"),zap.Int("int", 3),zap.Duration("time", time.Second),)// // 必須 key-value 結構形式 性能下降一點// logger.Sugar().Infow("test-",// "string", "kk",// "int", 1,// "time", time.Second,// )logger.Error("test02",zap.String("string", "x666g"),zap.Int("int", 4),zap.Duration("time", time.Second),)for {logger.Error("test02",zap.String("string", "x666g"),zap.Int("int", 4),zap.Duration("time", time.Second),)} }

總結

以上是生活随笔為你收集整理的go语言记录日志uber-go/zap/lumberjack的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。