背景:
當前專案需要,因為在專案部署後,會持續的產生大量的日誌,那麼其中最重要的就是我們所說的記憶體消耗問題了,一旦部署伺服器,會每時每刻的產生日誌,隨著時間的推移,可能日誌就會達到相當大的記憶體。如果專案很多可能堆積的大量日誌會導致系統服務無法使用
我就是根據這個需求,在網上找了一些相關的公共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...