在使用ubergo zap时,是否有任何方法可以隐藏日志敏感字段。
如果有人能举个例子的话
发布于 2022-08-24 11:26:46
您可以使这些字段自定义类型,并为它们实现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)函数中的类型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"}https://stackoverflow.com/questions/73469128
复制相似问题