You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.6 KiB
62 lines
1.6 KiB
package logging
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/go-kratos/kratos/v2/errors"
|
|
"github.com/go-kratos/kratos/v2/log"
|
|
"github.com/go-kratos/kratos/v2/middleware"
|
|
"github.com/go-kratos/kratos/v2/transport"
|
|
)
|
|
|
|
// Server is an server logging middleware.
|
|
func Server(logger log.Logger) middleware.Middleware {
|
|
return func(handler middleware.Handler) middleware.Handler {
|
|
return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
|
|
reply, err = handler(ctx, req)
|
|
if tr, ok := transport.FromContext(ctx); ok {
|
|
switch tr.Kind {
|
|
case transport.KindHTTP:
|
|
httpServerLog(logger, ctx, extractArgs(req), err)
|
|
case transport.KindGRPC:
|
|
grpcServerLog(logger, ctx, extractArgs(req), err)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// Client is an client logging middleware.
|
|
func Client(logger log.Logger) middleware.Middleware {
|
|
return func(handler middleware.Handler) middleware.Handler {
|
|
return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
|
|
reply, err = handler(ctx, req)
|
|
if tr, ok := transport.FromContext(ctx); ok {
|
|
switch tr.Kind {
|
|
case transport.KindHTTP:
|
|
httpClientLog(logger, ctx, extractArgs(req), err)
|
|
case transport.KindGRPC:
|
|
grpcClientLog(logger, ctx, extractArgs(req), err)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func extractArgs(req interface{}) string {
|
|
if stringer, ok := req.(fmt.Stringer); ok {
|
|
return stringer.String()
|
|
}
|
|
return fmt.Sprintf("%+v", req)
|
|
}
|
|
|
|
func extractError(err error) (code int, errMsg string) {
|
|
if err != nil {
|
|
code = errors.Code(err)
|
|
errMsg = fmt.Sprintf("%+v", err)
|
|
}
|
|
return
|
|
}
|
|
|