diff --git a/internal/cli/run_proxy.go b/internal/cli/run_proxy.go index dd08265..4fbf7b9 100644 --- a/internal/cli/run_proxy.go +++ b/internal/cli/run_proxy.go @@ -156,7 +156,7 @@ func makeEventStream(conf *config.Config, logger mtglib.Logger) (mtglib.EventStr func runProxy(conf *config.Config, version string) error { logger := makeLogger(conf) - logger.BindStr("configuration", conf.String()).Debug("configuration") + logger.BindJSON("configuration", conf.String()).Debug("configuration") ntw, err := makeNetwork(conf, version) if err != nil { diff --git a/logger/noop.go b/logger/noop.go index 61470ac..5d04b79 100644 --- a/logger/noop.go +++ b/logger/noop.go @@ -7,6 +7,7 @@ type noopLogger struct{} func (n noopLogger) Named(_ string) mtglib.Logger { return n } func (n noopLogger) BindInt(_ string, _ int) mtglib.Logger { return n } func (n noopLogger) BindStr(_, _ string) mtglib.Logger { return n } +func (n noopLogger) BindJSON(_, _ string) mtglib.Logger { return n } func (n noopLogger) Printf(_ string, _ ...interface{}) {} func (n noopLogger) Info(_ string) {} func (n noopLogger) Warning(_ string) {} diff --git a/logger/zerolog.go b/logger/zerolog.go index b0dc0b6..4f9c9b7 100644 --- a/logger/zerolog.go +++ b/logger/zerolog.go @@ -15,6 +15,7 @@ const ( zeroLogContextVarTypeUnknown zeroLogContextVarType = iota zeroLogContextVarTypeStr zeroLogContextVarTypeInt + zeroLogContextVarTypeJSON ) type zeroLogContext struct { @@ -66,6 +67,17 @@ func (z *zeroLogContext) BindStr(name, value string) mtglib.Logger { } } +func (z *zeroLogContext) BindJSON(name, value string) mtglib.Logger { + return &zeroLogContext{ + name: z.name, + log: z.log, + ctxVarType: zeroLogContextVarTypeJSON, + ctxVarName: name, + ctxVarStr: value, + parent: z, + } +} + func (z *zeroLogContext) Printf(format string, args ...interface{}) { z.Debug(fmt.Sprintf(format, args...)) } @@ -110,6 +122,8 @@ func (z *zeroLogContext) attachCtx(evt *zerolog.Event) { evt.Str(z.ctxVarName, z.ctxVarStr) case zeroLogContextVarTypeInt: evt.Int(z.ctxVarName, z.ctxVarInt) + case zeroLogContextVarTypeJSON: + evt.RawJSON(z.ctxVarName, []byte(z.ctxVarStr)) case zeroLogContextVarTypeUnknown: } } diff --git a/mtglib/init.go b/mtglib/init.go index 11a2fdf..08a4e2f 100644 --- a/mtglib/init.go +++ b/mtglib/init.go @@ -245,6 +245,9 @@ type Logger interface { // BindStr binds new string parameter to a new logger instance. BindStr(name, value string) Logger + // BindJSON binds a new JSON-encoded string to a new logger instance. + BindJSON(name, value string) Logger + // Printf is to support log.Logger behavior. Printf(format string, args ...interface{}) diff --git a/mtglib/init_internal_test.go b/mtglib/init_internal_test.go index 98127dd..b182d57 100644 --- a/mtglib/init_internal_test.go +++ b/mtglib/init_internal_test.go @@ -11,6 +11,7 @@ type NoopLogger struct{} func (n NoopLogger) Named(_ string) Logger { return n } func (n NoopLogger) BindInt(_ string, _ int) Logger { return n } func (n NoopLogger) BindStr(_, _ string) Logger { return n } +func (n NoopLogger) BindJSON(_, _ string) Logger { return n } func (n NoopLogger) Printf(_ string, _ ...interface{}) {} func (n NoopLogger) Info(_ string) {} func (n NoopLogger) Warning(_ string) {}