Skip to content

Instantly share code, notes, and snippets.

@ppaanngggg
Last active May 21, 2022 03:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ppaanngggg/e68af9cadc20ced00562a61d77825843 to your computer and use it in GitHub Desktop.
Save ppaanngggg/e68af9cadc20ced00562a61d77825843 to your computer and use it in GitHub Desktop.
kratos日志框架使用zerelog的例子
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