From c4721c0db70c8da8b764b148e035f9cbaa458709 Mon Sep 17 00:00:00 2001 From: soven Date: Mon, 16 Nov 2020 22:02:21 +0300 Subject: [PATCH 1/4] fix log stdlibadapter when prefixed --- log/stdlib.go | 36 ++++++++++++++++++++++++++++++--- log/stdlib_test.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 3 deletions(-) diff --git a/log/stdlib.go b/log/stdlib.go index ff96b5dee..6acd2e0f3 100644 --- a/log/stdlib.go +++ b/log/stdlib.go @@ -1,6 +1,7 @@ package log import ( + "bytes" "io" "log" "regexp" @@ -26,9 +27,11 @@ func (w StdlibWriter) Write(p []byte) (int, error) { // messages, and place them under relevant keys. type StdlibAdapter struct { Logger - timestampKey string - fileKey string - messageKey string + timestampKey string + fileKey string + messageKey string + prefix string + joinPrefixToMsg bool } // StdlibAdapterOption sets a parameter for the StdlibAdapter. @@ -49,6 +52,11 @@ func MessageKey(key string) StdlibAdapterOption { return func(a *StdlibAdapter) { a.messageKey = key } } +// Prefix sets value of the prefix for the actual log message. By default, there's no prefix. +func Prefix(prefix string, joinPrefixToMsg bool) StdlibAdapterOption { + return func(a *StdlibAdapter) { a.prefix = prefix; a.joinPrefixToMsg = joinPrefixToMsg } +} + // NewStdlibAdapter returns a new StdlibAdapter wrapper around the passed // logger. It's designed to be passed to log.SetOutput. func NewStdlibAdapter(logger Logger, options ...StdlibAdapterOption) io.Writer { @@ -65,6 +73,8 @@ func NewStdlibAdapter(logger Logger, options ...StdlibAdapterOption) io.Writer { } func (a StdlibAdapter) Write(p []byte) (int, error) { + p = a.handlePrefix(p) + result := subexps(p) keyvals := []interface{}{} var timestamp string @@ -84,6 +94,7 @@ func (a StdlibAdapter) Write(p []byte) (int, error) { keyvals = append(keyvals, a.fileKey, file) } if msg, ok := result["msg"]; ok { + msg = a.handleMessagePrefix(msg) keyvals = append(keyvals, a.messageKey, msg) } if err := a.Logger.Log(keyvals...); err != nil { @@ -92,6 +103,25 @@ func (a StdlibAdapter) Write(p []byte) (int, error) { return len(p), nil } +func (a StdlibAdapter) handlePrefix(p []byte) []byte { + if a.prefix != "" { + p = bytes.TrimPrefix(p, []byte(a.prefix)) + } + return p +} + +func (a StdlibAdapter) handleMessagePrefix(msg string) string { + if a.prefix == "" { + return msg + } + + msg = strings.TrimPrefix(msg, a.prefix) + if a.joinPrefixToMsg { + msg = a.prefix + msg + } + return msg +} + const ( logRegexpDate = `(?P[0-9]{4}/[0-9]{2}/[0-9]{2})?[ ]?` logRegexpTime = `(?P