[英]Hide sensitive fields in Uber Zap go
有什么方法可以在使用 ubergo zap 時隱藏日志記錄敏感字段。
如果有人可以舉個例子,將不勝感激
您可以將這些字段設為自定義類型並為它們實現 Stringer 接口以打印****
。 例如:
type X string
func (x X) String() string {
return "***"
}
func main() {
x := X("aaaaa")
log.Infow("msg", "x", x)
}
將打印msg {"x": "***"}
。
或者您可以實現自己的Encoder
版本,您可以在EncodeEntry(ent Entry, fields []Field)
function 中按名稱或其類型Interface
過濾字段。 您可以將現有的兩個編碼器之一 - 控制台或 json - 作為基礎。 例如:
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/buffer"
"go.uber.org/zap/zapcore"
)
type MyEncoder struct {
zapcore.Encoder
}
func (m *MyEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field) (*buffer.Buffer, error) {
filtered := make([]zapcore.Field, 0, len(fields))
for _, field := range fields {
if field.Key == "skip" || field.Type == zapcore.Int64Type {
continue
}
filtered = append(filtered, field)
}
return m.Encoder.EncodeEntry(entry, filtered)
}
func main() {
_ = zap.RegisterEncoder("mine", func(config zapcore.EncoderConfig) (zapcore.Encoder, error) {
encoder := zapcore.NewConsoleEncoder(config)
return &MyEncoder{encoder}, nil
})
config := zap.NewDevelopmentConfig()
config.Encoding = "mine"
log, _ := config.Build()
sugar := log.Sugar()
sugar.Infow("Some message", "skip", "skipped", "notskip", "present", "alsoskipping", int64(1))
}
這將打印
2022-08-24T13:25:54.368+0200 INFO testl/main.go:33 Some message {"notskip": "present"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.