Skip to content

Commit fb92842

Browse files
committed
[new] Add support for scittle, etc.
Before: Trove macro code was :clj conditional After: Trove macro code is now unconditional (any platform) Looks like there shouldn't be any downside to this change [1], but please do report if you've been negatively affected somehow! [1] https://clojurians.slack.com/archives/C091TEH5G9Z/p1764682809748049?thread_ts=1764556869.604369&cid=C091TEH5G9Z
1 parent 9c1f7ed commit fb92842

File tree

1 file changed

+56
-58
lines changed

1 file changed

+56
-58
lines changed

src/taoensso/trove.cljc

Lines changed: 56 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -47,64 +47,62 @@
4747

4848
(console/get-log-fn))
4949

50-
#?(:clj
51-
(defmacro set-log-fn!
52-
"Sets the root value of `*log-fn*` (see its docstring for more info)."
53-
[f]
54-
(if (:ns &env)
55-
`(set! *log-fn* ~f)
56-
`(alter-var-root (var *log-fn*) (fn [_#] ~f)))))
57-
58-
#?(:clj
59-
(defmacro log!
60-
"Logs the given info to the currently configured backend (see `*log-fn*`)
61-
and returns nil.
62-
63-
Common options:
64-
`:level` -- ∈ #{:trace :debug :info :warn :error :fatal :report} (default `:info`)
65-
`:id` ----- Optional keyword used to identify event, e.g. `:auth/login`, `::order-complete`, etc.
66-
`:msg` ---- Optional message string describing event (use `str`, `format`, etc. as needed)
67-
`:data` --- Optional arb map of structured data associated with event, e.g. {:user-id 1234}
68-
`:error` -- Optional platform error (`java.lang.Throwable`, `js/Error`)
69-
70-
Advanced options:
71-
`:let` ---- Bindings shared by lazy args: {:keys [msg data error kvs]}
72-
`:ns` ----- Custom namespace string to override default
73-
`:coords` - Custom [line column] to override default
74-
`:log-fn` - Custom `log-fn` to override default (`*log-fn*`)
75-
<kvs> ----- Any other kvs will also be provided to `log-fn`, handy for
76-
custom `log-fn` opts, etc.
77-
78-
Traditional logs typically include at least {:keys [level msg ...]}.
79-
Structured logs typically include at least {:keys [level id data ...]}."
80-
81-
{:arglists '([{:keys [level id msg data error]}])} ; Common only
82-
[opts]
83-
84-
(when-not (map? opts)
85-
(throw
86-
(ex-info "Trove opts must be a compile-time map"
87-
{:opts {:value opts, :type (type opts)}})))
88-
89-
(let [{:keys [ns coords level id msg data error log-fn] letf :let ; forms
90-
:or
91-
{ns (str *ns*)
92-
level :info
93-
coords (utils/callsite-coords &form)
94-
log-fn `*log-fn*}} opts
95-
96-
lfn (gensym "lfn__")
97-
kvs (not-empty (dissoc opts :ns :coords :level :id :error :let :msg :data :log-fn))
98-
lazy-form
99-
(when-let [opts (utils/assoc-some nil {:error error, :msg msg, :data data, :kvs kvs})]
100-
(if (every? utils/const? [opts letf])
101-
(if letf `(let ~letf ~opts) opts) ; Don't pay for wrapping
102-
(if letf `(delay (let ~letf ~opts)) `(delay ~opts))))]
103-
104-
`(let [~lfn ~log-fn]
105-
(when ~lfn
106-
(~lfn ~ns ~coords ~level ~id ~lazy-form))
107-
nil))))
50+
(defmacro set-log-fn!
51+
"Sets the root value of `*log-fn*` (see its docstring for more info)."
52+
[f]
53+
(if (:ns &env)
54+
`(set! *log-fn* ~f)
55+
`(alter-var-root (var *log-fn*) (fn [_#] ~f))))
56+
57+
(defmacro log!
58+
"Logs the given info to the currently configured backend (see `*log-fn*`)
59+
and returns nil.
60+
61+
Common options:
62+
`:level` -- ∈ #{:trace :debug :info :warn :error :fatal :report} (default `:info`)
63+
`:id` ----- Optional keyword used to identify event, e.g. `:auth/login`, `::order-complete`, etc.
64+
`:msg` ---- Optional message string describing event (use `str`, `format`, etc. as needed)
65+
`:data` --- Optional arb map of structured data associated with event, e.g. {:user-id 1234}
66+
`:error` -- Optional platform error (`java.lang.Throwable`, `js/Error`)
67+
68+
Advanced options:
69+
`:let` ---- Bindings shared by lazy args: {:keys [msg data error kvs]}
70+
`:ns` ----- Custom namespace string to override default
71+
`:coords` - Custom [line column] to override default
72+
`:log-fn` - Custom `log-fn` to override default (`*log-fn*`)
73+
<kvs> ----- Any other kvs will also be provided to `log-fn`, handy for
74+
custom `log-fn` opts, etc.
75+
76+
Traditional logs typically include at least {:keys [level msg ...]}.
77+
Structured logs typically include at least {:keys [level id data ...]}."
78+
79+
{:arglists '([{:keys [level id msg data error]}])} ; Common only
80+
[opts]
81+
82+
(when-not (map? opts)
83+
(throw
84+
(ex-info "Trove opts must be a compile-time map"
85+
{:opts {:value opts, :type (type opts)}})))
86+
87+
(let [{:keys [ns coords level id msg data error log-fn] letf :let ; forms
88+
:or
89+
{ns (str *ns*)
90+
level :info
91+
coords (utils/callsite-coords &form)
92+
log-fn `*log-fn*}} opts
93+
94+
lfn (gensym "lfn__")
95+
kvs (not-empty (dissoc opts :ns :coords :level :id :error :let :msg :data :log-fn))
96+
lazy-form
97+
(when-let [opts (utils/assoc-some nil {:error error, :msg msg, :data data, :kvs kvs})]
98+
(if (every? utils/const? [opts letf])
99+
(if letf `(let ~letf ~opts) opts) ; Don't pay for wrapping
100+
(if letf `(delay (let ~letf ~opts)) `(delay ~opts))))]
101+
102+
`(let [~lfn ~log-fn]
103+
(when ~lfn
104+
(~lfn ~ns ~coords ~level ~id ~lazy-form))
105+
nil)))
108106

109107
(comment
110108
(do (log! {:level :info, :msg "msg" :foo :bar}))

0 commit comments

Comments
 (0)