 (deflogger error)
 
 (defn exception
+  ([log-state ex label]
+   (add-log-entry log-state ::exception label))
   ([log-state ex label message]
-   (exception log-state ex label message nil))
+   (add-log-entry log-state ::exception label message))
   ([log-state ex label message original-details]
    (let [details {::original-details original-details
                   ::problem (exception-details ex)}]

;;;; Internal

(s/fdef build-log-entry
        :args (s/cat :label ::label
                     :lamport ::lamport
                     :level ::level
                     :message ::message))
(defn build-log-entry
  [label lamport level message]
  {::current-thread (utils/get-current-thread)
   ::label label
   ::lamport lamport
   ::level level
   ::time (System/currentTimeMillis)
   ::message message})

(s/fdef add-log-entry
        :args (s/cat :log-state ::state

                     :details ::details)
        :ret ::entries)
(defn add-log-entry
  ([{:keys [::lamport]
     :as log-state}
    level
    label]
   (when-not lamport
     (let [ex (ex-info "Desperation warning: missing clock among" (or {::problem log-state}
                                                                      {::problem "falsey log-state"}))]
       (s-t/print-stack-trace ex)))
   (-> log-state
       (update
        ::entries
        conj
        (build-log-entry label lamport level))
       (update ::lamport inc)))
  ([{:keys [::lamport]
     :as log-state}
    level
    label
