package middleware import ( "context" "git.diulo.com/mogfee/protoc-gen-kit/pkg/xlog" "github.com/sirupsen/logrus" "google.golang.org/grpc/metadata" "time" ) func Logger(serverName string, log *logrus.Logger) Middleware { baseEntry := log.WithFields(logrus.Fields{ "serverName": serverName, }) return func(handler Handler) Handler { return func(ctx context.Context, a any) (any, error) { st := time.Now() entry := baseEntry.WithFields(logrus.Fields{ "used_time": time.Since(st), "param": a, }) if md, ok := metadata.FromIncomingContext(ctx); ok { entry = entry.WithFields(logrus.Fields{ "ip": md.Get("remote_ip")[0], "full_path": md.Get("full_path")[0], }) } ctx = xlog.WithContext(ctx, entry) resp, err := handler(ctx, a) if err != nil { entry.WithContext(ctx).Errorf("%+v", err) } else { entry.WithContext(ctx).Info("") } return resp, err } } }