Last active
May 21, 2022 03:14
-
-
Save ppaanngggg/e68af9cadc20ced00562a61d77825843 to your computer and use it in GitHub Desktop.
kratos日志框架使用zerelog的例子
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"io" | |
"os" | |
"time" | |
klog "github.com/go-kratos/kratos/v2/log" | |
"github.com/rs/zerolog" | |
) | |
type Zerolog struct { | |
zlog zerolog.Logger | |
} | |
func (l *Zerolog) Log(level klog.Level, keyvals ...interface{}) error { | |
var event *zerolog.Event | |
switch level { | |
case klog.LevelDebug: | |
event = l.zlog.Debug() | |
case klog.LevelInfo: | |
event = l.zlog.Info() | |
case klog.LevelWarn: | |
event = l.zlog.Warn() | |
case klog.LevelError: | |
event = l.zlog.Error() | |
case klog.LevelFatal: | |
event = l.zlog.Fatal() | |
} | |
if event == nil { | |
return nil | |
} | |
for i := 0; i < len(keyvals); i += 2 { | |
if key, ok := keyvals[i].(string); ok { | |
event.Interface(key, keyvals[i+1]) | |
} | |
} | |
event.Send() | |
return nil | |
} | |
func TimeStampMicro() klog.Valuer { | |
return func(ctx context.Context) interface{} { | |
return time.Now().UnixMicro() | |
} | |
} | |
func main() { | |
klog.DefaultMessageKey = "log" | |
f, err := os.OpenFile("log.log", os.O_CREATE, os.FileMode(644)) | |
if err != nil { | |
panic(err) | |
} | |
defer f.Close() | |
w := io.MultiWriter(os.Stdout, f) | |
logger := klog.With( | |
&Zerolog{ | |
zlog: zerolog.New(w), | |
}, | |
"id", TimeStampMicro(), | |
"lineNo", klog.DefaultCaller, | |
) | |
h := klog.NewHelper(logger) | |
h.Info("hello") | |
logger = klog.With(logger, "span", "main") | |
h = klog.NewHelper(logger) | |
h.Info("world") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment