From 6bd2dcff2a8adb66e5bd89c1a7ac43d010c86705 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 9 Mar 2022 16:09:59 +0100 Subject: [PATCH] :sparkles: Minor improvements on error reporting --- backend/src/app/http/debug.clj | 3 ++- backend/src/app/http/errors.clj | 11 +---------- common/src/app/common/exceptions.cljc | 5 +++-- common/src/app/common/logging.cljc | 18 +++++++++++++++++- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/backend/src/app/http/debug.clj b/backend/src/app/http/debug.clj index 53f70a584..92daf1f63 100644 --- a/backend/src/app/http/debug.clj +++ b/backend/src/app/http/debug.clj @@ -162,7 +162,8 @@ (let [context (dissoc report :trace :cause :params :data :spec-problems :spec-explain :spec-value :error :explain :hint) - params {:context (with-out-str (fpp/pprint context {:width 300})) + params {:context (with-out-str + (fpp/pprint context {:width 200})) :hint (:hint report) :spec-explain (:spec-explain report) :spec-problems (:spec-problems report) diff --git a/backend/src/app/http/errors.clj b/backend/src/app/http/errors.clj index 40eaf9fc3..3a0a3218d 100644 --- a/backend/src/app/http/errors.clj +++ b/backend/src/app/http/errors.clj @@ -27,21 +27,12 @@ (merge {:path (:uri request) :method (:request-method request) - :hint (ex-message error) :params (:params request) - - :spec-problems (some->> data ::s/problems (take 10) seq vec) - :spec-value (some->> data ::s/value) - :data (some-> data (dissoc ::s/problems ::s/value ::s/spec)) :ip-addr (parse-client-ip request) :profile-id (:profile-id request)} - (let [headers (:headers request)] {:user-agent (get headers "user-agent") - :frontend-version (get headers "x-frontend-version" "unknown")}) - - (when (and data (::s/problems data)) - {:spec-explain (us/pretty-explain data)})))) + :frontend-version (get headers "x-frontend-version" "unknown")})))) (defmulti handle-exception (fn [err & _rest] diff --git a/common/src/app/common/exceptions.cljc b/common/src/app/common/exceptions.cljc index dbc63a8ba..b3b73e5a9 100644 --- a/common/src/app/common/exceptions.cljc +++ b/common/src/app/common/exceptions.cljc @@ -23,11 +23,12 @@ ::cause])) (defn error - [& {:keys [hint cause ::data] :as params}] + [& {:keys [hint cause ::data type] :as params}] (s/assert ::error-params params) (let [payload (-> params (dissoc :cause ::data) - (merge data))] + (merge data)) + hint (or hint (pr-str type))] (ex-info hint payload cause))) (defmacro raise diff --git a/common/src/app/common/logging.cljc b/common/src/app/common/logging.cljc index 663f4beae..44cadc35d 100644 --- a/common/src/app/common/logging.cljc +++ b/common/src/app/common/logging.cljc @@ -8,8 +8,10 @@ (:require [app.common.exceptions :as ex] [app.common.uuid :as uuid] + [app.common.spec :as us] [clojure.pprint :refer [pprint]] [cuerdas.core :as str] + [clojure.spec.alpha :as s] [fipp.edn :as fpp] #?(:clj [io.aviso.exception :as ie]) #?(:cljs [goog.log :as glog])) @@ -152,6 +154,18 @@ [logger level] (.isEnabled ^Logger logger ^Level level))) +#?(:clj + (defn get-error-context + [error] + (when-let [data (ex-data error)] + (merge + {:hint (ex-message error) + :spec-problems (some->> data ::s/problems (take 10) seq vec) + :spec-value (some->> data ::s/value) + :data (some-> data (dissoc ::s/problems ::s/value ::s/spec))} + (when (and data (::s/problems data)) + {:spec-explain (us/pretty-explain data)}))))) + (defmacro log [& {:keys [level cause ::logger ::async ::raw ::context] :or {async true} :as props}] (if (:ns &env) ; CLJS @@ -169,7 +183,9 @@ ~(if async `(send-off logging-agent (fn [_#] - (with-context (into {:id (uuid/next)} ~context) + (with-context (merge {:id (uuid/next)} + (get-error-context ~cause) + ~context) (->> (or ~raw (build-map-message ~props)) (write-log! ~logger-sym ~level-sym ~cause)))))