go语言记录日志uber-go/zap/lumberjack的用法
生活随笔
收集整理的這篇文章主要介紹了
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地址
2 參考博客
這里面寫得很詳細
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的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 游戏分享
- 下一篇: 程序员与公务员之争,到底选啥?