0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-03 21:09:00 -05:00

Minor improvements on error reporting

This commit is contained in:
Andrey Antukh 2022-03-09 16:09:59 +01:00
parent 73117f6f27
commit 6bd2dcff2a
4 changed files with 23 additions and 14 deletions

View file

@ -162,7 +162,8 @@
(let [context (dissoc report (let [context (dissoc report
:trace :cause :params :data :spec-problems :trace :cause :params :data :spec-problems
:spec-explain :spec-value :error :explain :hint) :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) :hint (:hint report)
:spec-explain (:spec-explain report) :spec-explain (:spec-explain report)
:spec-problems (:spec-problems report) :spec-problems (:spec-problems report)

View file

@ -27,21 +27,12 @@
(merge (merge
{:path (:uri request) {:path (:uri request)
:method (:request-method request) :method (:request-method request)
:hint (ex-message error)
:params (:params request) :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) :ip-addr (parse-client-ip request)
:profile-id (:profile-id request)} :profile-id (:profile-id request)}
(let [headers (:headers request)] (let [headers (:headers request)]
{:user-agent (get headers "user-agent") {:user-agent (get headers "user-agent")
:frontend-version (get headers "x-frontend-version" "unknown")}) :frontend-version (get headers "x-frontend-version" "unknown")}))))
(when (and data (::s/problems data))
{:spec-explain (us/pretty-explain data)}))))
(defmulti handle-exception (defmulti handle-exception
(fn [err & _rest] (fn [err & _rest]

View file

@ -23,11 +23,12 @@
::cause])) ::cause]))
(defn error (defn error
[& {:keys [hint cause ::data] :as params}] [& {:keys [hint cause ::data type] :as params}]
(s/assert ::error-params params) (s/assert ::error-params params)
(let [payload (-> params (let [payload (-> params
(dissoc :cause ::data) (dissoc :cause ::data)
(merge data))] (merge data))
hint (or hint (pr-str type))]
(ex-info hint payload cause))) (ex-info hint payload cause)))
(defmacro raise (defmacro raise

View file

@ -8,8 +8,10 @@
(:require (:require
[app.common.exceptions :as ex] [app.common.exceptions :as ex]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.common.spec :as us]
[clojure.pprint :refer [pprint]] [clojure.pprint :refer [pprint]]
[cuerdas.core :as str] [cuerdas.core :as str]
[clojure.spec.alpha :as s]
[fipp.edn :as fpp] [fipp.edn :as fpp]
#?(:clj [io.aviso.exception :as ie]) #?(:clj [io.aviso.exception :as ie])
#?(:cljs [goog.log :as glog])) #?(:cljs [goog.log :as glog]))
@ -152,6 +154,18 @@
[logger level] [logger level]
(.isEnabled ^Logger logger ^Level 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 (defmacro log
[& {:keys [level cause ::logger ::async ::raw ::context] :or {async true} :as props}] [& {:keys [level cause ::logger ::async ::raw ::context] :or {async true} :as props}]
(if (:ns &env) ; CLJS (if (:ns &env) ; CLJS
@ -169,7 +183,9 @@
~(if async ~(if async
`(send-off logging-agent `(send-off logging-agent
(fn [_#] (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)) (->> (or ~raw (build-map-message ~props))
(write-log! ~logger-sym ~level-sym ~cause))))) (write-log! ~logger-sym ~level-sym ~cause)))))