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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

使用Lumberjack进行日志切割归档

發布時間:2023/12/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Lumberjack进行日志切割归档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Lumberjack進行日志切割歸檔


文章目錄

  • 使用Lumberjack進行日志切割歸檔
    • 安裝
    • zap logger中加入Lumberjack
      • 測試所有功能


上述程序中唯一缺少的就是日志切割歸檔功能。

但是Zap庫本身不支持切割歸檔日志文件。

為了添加日志切割歸檔功能,我們將使用第三方庫Lumberjack來實現。

安裝

執行下面的命令安裝Lumberjack

go get github.com/natefinch/lumberjack

zap logger中加入Lumberjack

要在zap中加入Lumberjack支持,我們需要修改WriteSyncer代碼。我們將按照下面的代碼修改getLogWriter()函數:

func getLogWriter() zapcore.WriteSyncer {lumberJackLogger := &lumberjack.Logger{Filename: "./test.log",MaxSize: 10,MaxBackups: 5,MaxAge: 30,Compress: false,}return zapcore.AddSync(lumberJackLogger) }

Lumberjack Logger采用以下屬性作為輸入:

  • Filename: 日志文件的位置
  • MaxSize:在進行切割之前,日志文件的最大大小(以MB為單位)
  • MaxBackups:保留舊文件的最大個數
  • MaxAges:保留舊文件的最大天數
  • Compress:是否壓縮/歸檔舊文件

測試所有功能

最終,使用Zap/Lumberjack logger的完整示例代碼如下:

package mainimport ("github.com/natefinch/lumberjack""go.uber.org/zap""go.uber.org/zap/zapcore""net/http" )var sugarLogger *zap.SugaredLoggerfunc main() {InitLogger()defer sugarLogger.Sync()simpleHttpGet("www.google.com")simpleHttpGet("http://www.google.com") }func InitLogger() {writeSyncer := getLogWriter()encoder := getEncoder()core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)logger := zap.New(core, zap.AddCaller())sugarLogger = logger.Sugar() }func getEncoder() zapcore.Encoder {encoderConfig := zap.NewProductionEncoderConfig()encoderConfig.EncodeTime = zapcore.RFC3339TimeEncoderencoderConfig.EncodeLevel = zapcore.CapitalLevelEncoderreturn zapcore.NewConsoleEncoder(encoderConfig) }func getLogWriter() zapcore.WriteSyncer {lumberJackLogger := &lumberjack.Logger{Filename: "./test.log",MaxSize: 10,MaxBackups: 5,MaxAge: 30,Compress: false,}return zapcore.AddSync(lumberJackLogger) }func simpleHttpGet(url string) {sugarLogger.Debugf("Trying to hit GET request for %s", url)resp, err := http.Get(url)if err != nil {sugarLogger.Errorf("Error fetching URL %s : Error = %s", url, err)} else {sugarLogger.Infof("Success! statusCode = %s for URL %s", resp.Status, url)resp.Body.Close()} }

執行上述代碼,下面的內容會輸出到文件——test.log中:

2022-03-24T23:38:57+08:00 DEBUG SugaredLogger/main.go:42 Trying to hit GET request for www.google.com 2022-03-24T23:38:57+08:00 ERROR SugaredLogger/main.go:45 Error fetching URL www.google.com : Error = Get "www.google.com": unsupported protocol scheme "" 2022-03-24T23:38:57+08:00 DEBUG SugaredLogger/main.go:42 Trying to hit GET request for http://www.google.com 2022-03-24T23:39:18+08:00 ERROR SugaredLogger/main.go:45 Error fetching URL http://www.google.com : Error = Get "http://www.google.com": dial tcp 108.160.162.102:80: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 2022-03-24T23:48:14+08:00 DEBUG 10Lumberjack/main.go:48 Trying to hit GET request for www.google.com 2022-03-24T23:48:14+08:00 ERROR 10Lumberjack/main.go:51 Error fetching URL www.google.com : Error = Get "www.google.com": unsupported protocol scheme "" 2022-03-24T23:48:14+08:00 DEBUG 10Lumberjack/main.go:48 Trying to hit GET request for http://www.google.com 2022-03-24T23:48:35+08:00 ERROR 10Lumberjack/main.go:51 Error fetching URL http://www.google.com : Error = Get "http://www.google.com": dial tcp 173.252.108.21:80: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

同時,可以在main函數中循環記錄日志,測試日志文件是否會自動切割和歸檔(日志文件每1MB會切割并且在當前目錄下最多保存5個備份)。

承接上文:

使用Uber-go Zap日志庫


參考資料:

https://www.liwenzhou.com/posts/Go/zap/

總結

以上是生活随笔為你收集整理的使用Lumberjack进行日志切割归档的全部內容,希望文章能夠幫你解決所遇到的問題。

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