天天看點

go-micro項目實戰七 logging

logging

我們之前分别講了微服務架構下的tracing,metrics。這節我們來講一下logging

日志作為整個代碼行為的記錄,是程式執行邏輯和異常最直接的回報。對于整個系統來說,日志是至關重要的組成部分。通過分析日志我們不僅可以發現系統的問題,同時日志中也蘊含了大量有價值可以被挖掘的資訊,是以合理地記錄日志是十分必要的。

個人了解 tracing對于系統性能分析很重要。

metrics對于系統的運作狀态有了全局的把控。可以提前預警一些狀态。

logging對于我們程式猿在遇到問題時具體去查錯更加重要。

logging日志庫選型

go-micro預設的go-log,幾乎不能看。pass了

去github上找到了兩款最受歡迎的日志庫元件。logrus(10.7K star),zap(6.6K star)

logrus:不支援日志切割,具有強大的hook功能。

zap:不支援日志切割,高性能,對。就是高性能。

對比之下,我選擇了高性能。是以本節講如何将zap內建到go-micro裡

zap使用指南

zap預設沒有切割日志功能。官方推薦lumberjack來進行切割。

fileName := "micro-srv.log"
	syncWriter := zapcore.AddSync(&lumberjack.Logger{
		Filename:  fileName,
		MaxSize:   128, //MB
		LocalTime: true,
		Compress:  true,
	})
	encoder := zap.NewProductionEncoderConfig()
	encoder.EncodeTime = zapcore.ISO8601TimeEncoder
	core := zapcore.NewCore(zapcore.NewJSONEncoder(encoder), syncWriter, zap.NewAtomicLevelAt(zap.DebugLevel))
	log := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
	logger = log.Sugar()
           

總結

為了友善使用,我釋出了個go-log包,把代碼裡的引用之前micro裡go-log包替換成這個即可。隻是沒有logger.Log和Logf方法。有的都是zap裡的方法例如Info和Infof,可以用此替代Log和Logf

https://github.com/qin-jd/go-log

繼續閱讀