From 910a9e2fb3c47913cbc233f205eb1c5cf7725c98 Mon Sep 17 00:00:00 2001 From: Yaroslav Kirillov Date: Wed, 7 Oct 2026 18:48:28 +0500 Subject: [PATCH] fix logging user in grpc mw --- internal/app/mw/error_type.go | 9 +++++++++ internal/app/mw/grpc_mw.go | 19 +++++++++++-------- internal/app/mw/http_mw.go | 15 +++++---------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/internal/app/mw/error_type.go b/internal/app/mw/error_type.go index ed2389e..f99b4d9 100644 --- a/internal/app/mw/error_type.go +++ b/internal/app/mw/error_type.go @@ -11,6 +11,8 @@ const ( respServerError ) +const unknownError = "unknown error" + // gRPCRespErrorTypeFromStatusCode returns response error type depending on gRPC status code. func gRPCRespErrorTypeFromStatusCode(statusCode codes.Code) respErrorType { switch statusCode { @@ -36,3 +38,10 @@ func httpRespErrorTypeFromStatusCode(statusCode int) respErrorType { return respServerError } } + +func processErrorMessage(err string) string { + if err == "" { + return unknownError + } + return err +} diff --git a/internal/app/mw/grpc_mw.go b/internal/app/mw/grpc_mw.go index 241f0de..a76e6f2 100644 --- a/internal/app/mw/grpc_mw.go +++ b/internal/app/mw/grpc_mw.go @@ -30,12 +30,17 @@ func GRPCLogInterceptor(l *tracing.Logger) grpc.UnaryServerInterceptor { if err != nil { l.Error(ctx, "failed to marshal request message", zap.Error(err)) } + reqLogArgs := requestLogArgs{ component: "gRPC", header: md, fullMethod: info.FullMethod, requestBody: string(rBody), } + if userName, err := types.GetUserKey(ctx); err == nil { + reqLogArgs.user = userName + } + logRequestBeforeHandler(ctx, l, reqLogArgs) start := time.Now() @@ -52,15 +57,13 @@ func GRPCLogInterceptor(l *tracing.Logger) grpc.UnaryServerInterceptor { errType := gRPCRespErrorTypeFromStatusCode(st.Code()) - if errType == respClientError { - reqLogArgs.clientError = st.Err().Error() - } - if errType == respServerError { - reqLogArgs.serverError = st.Err().Error() - } - if userName, err := types.GetUserKey(ctx); err == nil { - reqLogArgs.user = userName + switch errType { + case respClientError: + reqLogArgs.clientError = processErrorMessage(st.Err().Error()) + case respServerError: + reqLogArgs.serverError = processErrorMessage(st.Err().Error()) } + if details := st.Details(); len(details) > 0 { reqLogArgs.details = details } diff --git a/internal/app/mw/http_mw.go b/internal/app/mw/http_mw.go index 1cbee39..7d4e1e6 100644 --- a/internal/app/mw/http_mw.go +++ b/internal/app/mw/http_mw.go @@ -77,16 +77,11 @@ func HTTPLogInterceptor(l *tracing.Logger) func(next http.Handler) http.Handler reqLogArgs.statusCode = http.StatusText(statusCodeInt) reqLogArgs.took = took - if errType == respClientError { // nolint:staticcheck - reqLogArgs.clientError = ww.ErrorMessage - if reqLogArgs.clientError == "" { - reqLogArgs.clientError = "unknown error" - } - } else if errType == respServerError { - reqLogArgs.serverError = ww.ErrorMessage - if reqLogArgs.serverError == "" { - reqLogArgs.serverError = "unknown error" - } + switch errType { + case respClientError: + reqLogArgs.clientError = processErrorMessage(ww.ErrorMessage) + case respServerError: + reqLogArgs.serverError = processErrorMessage(ww.ErrorMessage) } logRequestAfterHandler(r.Context(), l, reqLogArgs)