gogo-chizerolog

Zerolog logger does not display error field in the logs


I want to log the error but it displays all other data except the error field.

// Logger creation
log = zerolog.New(output).
            Level(zerolog.Level(logLevel)).
            With().
            Stack().
            Caller().
            Timestamp().
            Str("git_revision", gitRevision).
            Str("go_version", buildInfo.GoVersion).
            Logger()

// Calling logger
l = logger.Get()

reqIDRaw := middleware.GetReqID(r.Context())
    l.Warn().
        Str("requestID", reqIDRaw).
        Str("method", r.Method).
        Str("url", r.URL.Path).
        Err(errors.Wrap(err, "bad request")).
        Msg("bad request")

This gives the following output

2025-02-24T10:02:35+03:00 WRN internal/services/response/error_response.go:43 > bad request method=POST requestID=Kengos-MacBook-Pro.local/0hS9QB33oG-000001 url=/v1/auth/register


Solution

  • I've found the issue causing this.

    // This is the `err` I wish to log
    if err := validate.Validate.Struct(payload); err != nil {
            // err becomes nil here
            errResponse, err := utils.GenerateErrorMessages(err)
            if err != nil {
                utils.WriteJSON(w, http.StatusInternalServerError, err)
                return
            }
    
            errorMessage := response.ErrorResponse{
                Message: "Invalid request body",
                Errors:  errResponse,
            }
            // nil err is passed to response writer and not logged.
            response.BadRequestErrorResponse(w, r, err, errorMessage)
            return
        }
    

    I just need to change the use different variable names for the error.