This is a logger library that uses zerolog to implement the Kitex logger interface, work together with kitex obs-opentelemetry
Download and install it:
go get github.com/kitex-contrib/obs-opentelemetry/logging/zerolog
Import it in your code:
import kitexzerolog github.com/kitex-contrib/obs-opentelemetry/logging/zerolog
package main
import (
"github.com/rs/zerolog/log"
"github.com/cloudwego/kitex/pkg/klog"
kitexzerolog "github.com/kitex-contrib/obs-opentelemetry/logging/zerolog"
)
func main() {
logger := kitexzerolog.NewLogger()
klog.SetLogger(logger)
klog.SetLevel(klog.LevelDebug)
// OR / AND using global logger
log.Logger = *logger.Logger()
}
We provide some methods to help you customize logger
Configuration | Description |
---|---|
WithLogger | Logger |
WithTraceErrorSpanLevel | trace error span level option |
WithRecordStackTraceInSpan | record stack track option |
// Echo implements the Echo interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
klog.CtxDebugf(ctx, "echo called: %s", req.GetMessage())
return &api.Response{Message: req.Message}, nil
}
In case your code base has already used global logger from zerolog
import (
"github.com/rs/zerolog/log"
)
// Echo implements the Echo interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
log.Debug().Ctx(ctx).Msgf("echo called: %s", req.GetMessage())
return &api.Response{Message: req.Message}, nil
}
{
"level": "info",
"ts": 1667619647.1459548,
"msg": "hello world",
"trace_id": "c77e46c0fb590ee80b6d78ed6682768e",
"span_id": "b42c96c6dd01ceaf",
"trace_flags": "01"
}
For some reason, zerolog will not log extra context info.