首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Uber Zap go中隐藏敏感字段

在Uber Zap go中隐藏敏感字段
EN

Stack Overflow用户
提问于 2022-08-24 07:34:43
回答 1查看 250关注 0票数 0

在使用ubergo zap时,是否有任何方法可以隐藏日志敏感字段。

如果有人能举个例子的话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-24 11:26:46

您可以使这些字段自定义类型,并为它们实现Stringer接口打印****。例如:

代码语言:javascript
复制
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 -作为基础。例如:

代码语言:javascript
复制
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))
}

这个会打印出来

代码语言:javascript
复制
2022-08-24T13:25:54.368+0200    INFO    testl/main.go:33        Some message    {"notskip": "present"}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73469128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档