package logger
import (
"bytes"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
ctrl "sigs.k8s.io/controller-runtime"
)
var _ = Describe("Logger", func() {
It("Test Default Log Level", func() {
buf := &bytes.Buffer{}
testLog := ctrl.Log.WithName("setup")
SetLogger()
testLog.Info("This is a test")
Expect(buf.String(),"This is a test")
})
})
這是SetLogger在生產中也使用的函式:
package logger
import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
...
)
func SetLogger() {
opts := zap.Options{
Development: developmentFlag,
StacktraceLevel: stacktraceLevel,
Level: isLevelEnabler,
Encoder: logFmtEncoder,
}
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
}
如何更改testLog.Infoto 緩沖區的輸出?
uj5u.com熱心網友回復:
如果您只對測驗日志訊息感興趣,可以使用鉤子。
特別是zap.Hooks函式zap.Option從可變數量的鉤子構造一個。鉤子只是一個func(entry zapcore.Entry) error可以用來攔截條目并將其訊息寫入緩沖區的 。
要將其設定zap.Option到您的sigs.k8s.io記錄器中,請將其設定為以下ZapOpts欄位:
opts := k8szap.Options{
// ...
ZapOpts: []zap.Option{
zap.Hooks(func(entry zapcore.Entry) error {
buf.WriteString(entry.Message)
return nil
}),
},
}
因此,由于您需要訪問緩沖區,您可以將其作為引數傳遞給SetLogger函式:
func SetLogger(buf *bytes.Buffer) {
opts := zap.Options{
Development: developmentFlag,
StacktraceLevel: stacktraceLevel,
Level: isLevelEnabler,
Encoder: logFmtEncoder,
// here 'zap' selector is 'go.uber.org/zap'
ZapOpts: []zap.Option{
zap.Hooks(func(entry zapcore.Entry) error {
buf.WriteString(entry.Message)
return nil
}),
},
}
// here I call 'k8szap' selector the package 'sigs.k8s.io/controller-runtime/pkg/log/zap'
ctrl.SetLogger(k8szap.New(k8szap.UseFlagOptions(&opts)))
}
然后在您的測驗功能中:
It("Test Default Log Level", func() {
buf := &bytes.Buffer{}
testLog := ctrl.Log.WithName("setup")
// pass buffer to SetLogger
SetLogger(buf)
testLog.Info("This is a test")
Expect(buf.String(), "This is a test")
})
最小例子(在playground下載包時可能會超時):https : //play.golang.org/p/oBN3SHFKVC8
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343561.html
上一篇:Golang讀者:為什么使用按位運算子<<撰寫int64數字
下一篇:在Go中使用base64.StdEncoding或base64.RawStdEncoding解碼base64字串
