diff options
Diffstat (limited to 'internal/service/middleware/loghandler/loghandler.go')
-rw-r--r-- | internal/service/middleware/loghandler/loghandler.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/internal/service/middleware/loghandler/loghandler.go b/internal/service/middleware/loghandler/loghandler.go new file mode 100644 index 000000000..8f4d17f5b --- /dev/null +++ b/internal/service/middleware/loghandler/loghandler.go @@ -0,0 +1,32 @@ +package loghandler + +import ( + "log" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +// UnaryLogHandler handles access times and errors for unary RPC's +func UnaryLogHandler(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + start := time.Now() + resp, err := handler(ctx, req) + logRequest(info.FullMethod, start, err) + return resp, err +} + +// StreamLogHandler handles access times and errors for stream RPC's +func StreamLogHandler(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { + start := time.Now() + err := handler(srv, stream) + logRequest(info.FullMethod, start, err) + return err +} + +func logRequest(method string, start time.Time, err error) { + if err != nil { + log.Printf("error: %s: %v", method, err) + } + log.Printf("%s %.3f", method, time.Since(start).Seconds()) +} |