Go uber go zap log函式庫簡單範例。
範例環境:
- Go 1.16
安裝
在專案根目錄輸入go get -u go.uber.org/zap
下載並安裝zap。
~/.../go-demo$ go get -u go.uber.org/zap
go: downloading go.uber.org/zap v1.19.1
...
go get: added go.uber.org/zap v1.19.1
範例
透過zap的預配置(preset)函式NewExample()
建立Logger
實例,然後呼叫Logger.Sugar()
轉成SugaredLogger
來使用log。
NewExample()
是在範例使用,此外還有NewDevelopment()
及NewProduction()
來產生開發或生產環境的Logger
實例。
defer suger.Sync()
作用為在程式結束前清除log的buffer。
使用SugaredLogger
不同層級的log方法Debug()
、Info()
、Error()
等來印訊息,會根據zap的配置決定是否印出。
main.go
package main
import (
"go.uber.org/zap"
)
func main() {
sugar := zap.NewExample().Sugar() // create a new SugaredLogger instance
defer sugar.Sync()
sugar.Debug("debug message")
sugar.Info("info message")
sugar.Error("error message")
sugar.Warn("warn message")
sugar.Panic("panic message")
sugar.Fatal("fatal message")
}
zap log印出結果如下。最下面的錯誤訊息是SugaredLogger.Panic()
寫出的stack trace並離開函式main()
,所以看不到SugaredLogger.Fatal()
印出的訊息。
{"level":"debug","msg":"debug message"}
{"level":"info","msg":"info message"}
{"level":"error","msg":"error message"}
{"level":"warn","msg":"warn message"}
{"level":"panic","msg":"panic message"}
panic: panic message
goroutine 1 [running]:
go.uber.org/zap/zapcore.(*CheckedEntry).Write(0xc00014c0c0, 0x0, 0x0, 0x0)
/Users/user/go/pkg/mod/go.uber.org/zap@v1.19.1/zapcore/entry.go:232 +0x532
go.uber.org/zap.(*SugaredLogger).log(0xc000117ea0, 0x4, 0x0, 0x0, 0xc000117eb8, 0x1, 0x1, 0x0, 0x0, 0x0)
/Users/user/go/pkg/mod/go.uber.org/zap@v1.19.1/sugar.go:227 +0x111
go.uber.org/zap.(*SugaredLogger).Panic(...)
/Users/user/go/pkg/mod/go.uber.org/zap@v1.19.1/sugar.go:123
main.main()
/.../go-demo/main.go:16 +0x2f5
exit status 2
zap有兩種logger分別為Logger
及SugaredLogger
。SugaredLogger
為Logger
的一層包裝,提供訊息格式化API,但效能較Logger
差一點。
Logger
的使用方式同SugaredLogger
。
main.go
package main
import (
"go.uber.org/zap"
)
func main() {
logger := zap.NewExample()
defer logger.Sync()
logger.Info("failed to fetch URL",
zap.String("url", "http://abc.com/get"),
zap.Int("attempt", 3),
zap.Bool("enabled", true),
)
}
印出以下。
{"level":"info","msg":"failed to fetch URL","url":"http://abc.com/get","attempt":3,"enabled":true}
沒有留言:
張貼留言