簡體   English   中英

隱藏 Uber Zap go 中的敏感字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM