-
Notifications
You must be signed in to change notification settings - Fork 0
/
middlewares.go
44 lines (40 loc) · 1.09 KB
/
middlewares.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package grpc_server
import (
"context"
"encoding/json"
"fmt"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"google.golang.org/grpc"
"time"
)
func recoveryHandler(ctx context.Context, p interface{}) (err error) {
log.Error().
Str("panic", fmt.Sprintf("%+v", p)).
Str("ctx", fmt.Sprintf("%+v", ctx)).
Msg("PANIC")
if err, ok := p.(error); ok {
return fmt.Errorf("panic: %w", err)
}
return fmt.Errorf("panic: %+v", p)
}
func logIncomingRequestsMiddleware(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
start := time.Now()
requestJSON, _ := json.Marshal(req)
result, err := handler(ctx, req)
responseJSON, _ := json.Marshal(result)
var logEvent *zerolog.Event
if err != nil {
logEvent = log.Error().Str("error", fmt.Sprintf("%+v", err))
} else {
logEvent = log.Info()
}
logEvent.
Dur("duration", time.Since(start)).
RawJSON("json_response", responseJSON).
RawJSON("json_request", requestJSON).
Str("url", info.FullMethod).
Str("ctx", fmt.Sprintf("%+v", ctx)).
Msg("complete")
return result, err
}