1

I want to add shared fields to the logger so that subsequent logs will all contain some common fields.

There are the options to use (*zap.Logger) With() or (*zap.Logger) WithOptions(zap.Fields). However both append fields instead of replace.

I had logs that had repeated field values, probably because I called With() at multiple places for the same logger instance. i.e.

func fnA(ctx context.Context) {
    zaplogger := FromContext(ctx)
    zaplogger = zaplogger.With(zap.String("a", "123"))
    ctx = NewContext(ctx, zaplogger)
    ...

    fnB(ctx)
}

func fnB(ctx context.Context) {
    zaplogger := FromContext(ctx)
    zaplogger = zaplogger.With(zap.String("a", "123"))
    // log becomes {"a": "123123"}
}

Is there a way to do a replace instead of append or check for existing field?

3tbraden
  • 667
  • 1
  • 10
  • 21

0 Answers0