mirror of
https://github.com/go-kratos/kratos.git
synced 2025-02-05 13:15:11 +02:00
fix: zap log print out multiple msg
(#3171)
* fix: zap log print out multiple `msg` * fix: zap log print out multiple `msg` * feat: add message key option
This commit is contained in:
parent
d9f390cdbb
commit
c7fa51df7a
@ -11,15 +11,31 @@ import (
|
||||
var _ log.Logger = (*Logger)(nil)
|
||||
|
||||
type Logger struct {
|
||||
log *zap.Logger
|
||||
log *zap.Logger
|
||||
msgKey string
|
||||
}
|
||||
|
||||
type Option func(*Logger)
|
||||
|
||||
// WithMessageKey with message key.
|
||||
func WithMessageKey(key string) Option {
|
||||
return func(l *Logger) {
|
||||
l.msgKey = key
|
||||
}
|
||||
}
|
||||
|
||||
func NewLogger(zlog *zap.Logger) *Logger {
|
||||
return &Logger{zlog}
|
||||
return &Logger{
|
||||
log: zlog,
|
||||
msgKey: log.DefaultMessageKey,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Logger) Log(level log.Level, keyvals ...interface{}) error {
|
||||
keylen := len(keyvals)
|
||||
var (
|
||||
msg = ""
|
||||
keylen = len(keyvals)
|
||||
)
|
||||
if keylen == 0 || keylen%2 != 0 {
|
||||
l.log.Warn(fmt.Sprint("Keyvalues must appear in pairs: ", keyvals))
|
||||
return nil
|
||||
@ -27,20 +43,24 @@ func (l *Logger) Log(level log.Level, keyvals ...interface{}) error {
|
||||
|
||||
data := make([]zap.Field, 0, (keylen/2)+1)
|
||||
for i := 0; i < keylen; i += 2 {
|
||||
if keyvals[i].(string) == l.msgKey {
|
||||
msg, _ = keyvals[i+1].(string)
|
||||
continue
|
||||
}
|
||||
data = append(data, zap.Any(fmt.Sprint(keyvals[i]), keyvals[i+1]))
|
||||
}
|
||||
|
||||
switch level {
|
||||
case log.LevelDebug:
|
||||
l.log.Debug("", data...)
|
||||
l.log.Debug(msg, data...)
|
||||
case log.LevelInfo:
|
||||
l.log.Info("", data...)
|
||||
l.log.Info(msg, data...)
|
||||
case log.LevelWarn:
|
||||
l.log.Warn("", data...)
|
||||
l.log.Warn(msg, data...)
|
||||
case log.LevelError:
|
||||
l.log.Error("", data...)
|
||||
l.log.Error(msg, data...)
|
||||
case log.LevelFatal:
|
||||
l.log.Fatal("", data...)
|
||||
l.log.Fatal(msg, data...)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ func TestLogger(t *testing.T) {
|
||||
zlog.Warnw("log", "warn")
|
||||
zlog.Errorw("log", "error")
|
||||
zlog.Errorw("log", "error", "except warn")
|
||||
zlog.Info("hello world")
|
||||
|
||||
except := []string{
|
||||
"{\"level\":\"debug\",\"msg\":\"\",\"log\":\"debug\"}\n",
|
||||
@ -52,6 +53,7 @@ func TestLogger(t *testing.T) {
|
||||
"{\"level\":\"warn\",\"msg\":\"\",\"log\":\"warn\"}\n",
|
||||
"{\"level\":\"error\",\"msg\":\"\",\"log\":\"error\"}\n",
|
||||
"{\"level\":\"warn\",\"msg\":\"Keyvalues must appear in pairs: [log error except warn]\"}\n",
|
||||
"{\"level\":\"info\",\"msg\":\"hello world\"}\n", // not {"level":"info","msg":"","msg":"hello world"}
|
||||
}
|
||||
for i, s := range except {
|
||||
if s != syncer.output[i] {
|
||||
|
Loading…
x
Reference in New Issue
Block a user