Files
2022-03-17 15:59:24 +08:00

62 lines
1.2 KiB
Go

package logger
import (
"context"
"strings"
api "gitlab.33.cn/chat/dtalk/pkg/api/logger"
"gitlab.33.cn/chat/dtalk/pkg/logger"
"github.com/rs/zerolog"
"google.golang.org/grpc"
)
type Logger interface {
Info(msg string, ctx ...interface{})
Error(msg string, ctx ...interface{})
}
type ServerInterceptor struct {
log zerolog.Logger
filter []string
}
func NewServerInterceptor(log zerolog.Logger, filter []string) *ServerInterceptor {
return &ServerInterceptor{
log: log,
filter: filter,
}
}
func (s *ServerInterceptor) Unary(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
//log.Infof("%s req: %v", info.FullMethod, req)
for _, method := range s.filter {
if strings.HasPrefix(info.FullMethod, method) {
return handler(ctx, req)
}
}
logt := logger.NewLogWithCtx(ctx, s.log)
logt.Info().
Str("Path", info.FullMethod).
Interface("|body", req).
Msg("rpc req")
m, err := handler(ctx, req)
if err != nil {
//log.Error("%s err: %v", info.FullMethod, err)
code, msg := api.ParseErr(err)
if code != 0 {
logt.Error().
Int("code", code).
Str("msg", msg).
Msg("rpc err")
}
}
//log.Info("%s resp: %v", info.FullMethod, m)
return m, err
}