Go之zap的log包使用

2021-10-10 21:15:27 字數 3157 閱讀 2480

背景:

當前專案需要,因為在專案部署後,會持續的產生大量的日誌,那麼其中最重要的就是我們所說的記憶體消耗問題了,一旦部署伺服器,會每時每刻的產生日誌,隨著時間的推移,可能日誌就會達到相當大的記憶體。如果專案很多可能堆積的大量日誌會導致系統服務無法使用

我就是根據這個需求,在網上找了一些相關的公共log包,看看有沒有什麼可以使用的,發現其中zap包效能和使用上面最為方便,下面就具體介紹相關的使用:(springboot的log已經解決了這個問題,前面的部落格已經進行了說明)

首先:該包的優勢:

zap的包主要就是效能強大,同時可以看出,該包可以根據使用者的需求進行自定義設計,例如,可以配置檔案多大進行打包壓縮包,同時多久可以自動的清除檔案。會儲存最新的檔案,而自動的產出過期的檔案,過期日期自定義設定。

需要的依賴包:

"go.uber.org/zap"

"go.uber.org/zap/zapcore"

filepath: 檔案的名稱
configfilepath  : 資料夾的路徑
。。。需要配置的可以將這部分內容配置到我們的專案配置檔案中

package log

import (

"fmt"

"go.uber.org/zap"

"go.uber.org/zap/zapcore"

"gopkg.in/natefinch/lumberjack.v2"

"os"

"strings"

)// error logger

var errorlogger *zap.sugaredlogger

var levelmap = map[string]zapcore.level

func getloggerlevel(lvl string) zapcore.level

return zapcore.infolevel

}func init() else

} configloglevel := "info" //等級

fmt.printf("log.level:%s\n", configloglevel)

level := getloggerlevel(configloglevel) //日誌等級

hook := lumberjack.logger

syncwriter := zapcore.addsync(&hook)

highpriority := zap.levelenablerfunc(func(lvl zapcore.level) bool )

lowpriority := zap.levelenablerfunc(func(lvl zapcore.level) bool )

encoder := zap.newproductionencoderconfig()

encoder.encodetime = zapcore.iso8601timeencoder

consoledebugging := zapcore.lock(os.stdout)

consoleerrors := zapcore.lock(os.stderr)

consoleencoder := zapcore.newconsoleencoder(zap.newdevelopmentencoderconfig())

core := zapcore.newtee(

zapcore.newcore(zapcore.newjsonencoder(encoder), syncwriter, zap.newatomiclevelat(level)),

zapcore.newcore(consoleencoder, consoleerrors, highpriority),

zapcore.newcore(consoleencoder, consoledebugging, lowpriority),

) logger := zap.new(core, zap.addcaller(), zap.addcallerskip(1))

errorlogger = logger.sugar()

}func debug(args ...inte***ce{})

func debugf(template string, args ...inte***ce{})

func info(args ...inte***ce{})

func infof(template string, args ...inte***ce{})

func warn(args ...inte***ce{})

func warnf(template string, args ...inte***ce{})

func error(args ...inte***ce{})

func errorf(template string, args ...inte***ce{})

func dpanic(args ...inte***ce{})

func dpanicf(template string, args ...inte***ce{})

func panic(args ...inte***ce{})

func panicf(template string, args ...inte***ce{})

func fatal(args ...inte***ce{})

func fatalf(template string, args ...inte***ce{})

func test14(t *testing.t)
測試結果如下:

log.level:info

=== run test14

2020-11-26t13:46:02.555+0800 info test/gotmgao_test.go:125 hello

2020-11-26t13:46:02.571+0800 info test/gotmgao_test.go:126 world!!

2020-11-26t13:46:02.571+0800 debug test/gotmgao_test.go:127 world!!

2020-11-26t13:46:02.571+0800 error test/gotmgao_test.go:128 world!!

Go語言 log日誌包

golang s log模組主要提供了3類介面。分別是 print panic fatal 對每一類介面其提供了3中呼叫方式,分別是 x xln xf 基本和fmt中的相關函式類似,下面是乙個print的示例 package main import log func main log.print p...

Go語言標準庫之log

目錄 四 建立logger 五 總結 go 從入門到放棄完整教程目錄 更有python go pytorch tensorflow 爬蟲 人工智慧教學等著你 更新 更全的 go從入門到放棄 的更新 更有python go 人工智慧教學等著你 無論是軟體開發的除錯階段還是軟體上線之後的執行階段,日誌一...

Golang內建Log包的基本使用

使用標準logger log包定義了logger型別,該型別提供了一些格式化輸出的方法。本包也提供了乙個預定義的 標準 logger,可以通過呼叫函式print系列 print printf println fatal系 fatal fatalf fatalln 和panic系列 panic pan...