-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.clj
95 lines (78 loc) · 1.84 KB
/
log.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
(ns sisyphus.log)
;; This file is an experiment to create a minimal log level implementation. Not currently in use.
(def ^:dynamic *debug* false)
(def ^:dynamic *trace* false)
(def ^:dynamic *info* false)
(def ^:dynamic *warn* false)
(def ^:dynamic *error* false)
(def log-levels
[[:debug #'*debug*]
[:trace #'*trace*]
[:info #'*info*]
[:warn #'*warn*]
[:error #'*error*]])
(defn log-level
"Given a map of log level keys to vars and a level, return all level keys implied by this level."
[levels level]
(into {}
(map
(juxt last (constantly true))
(drop-while
(comp (partial not= level) first)
levels))))
(defn debug
[& x]
(when *debug*
(apply println x)))
(defn trace
[& x]
(when *trace*
(apply println x)))
(defn info
[& x]
(when *info*
(apply println x)))
(defn warn
[& x]
(when *warn*
(apply println x)))
(defn error
[& x]
(when *error*
(apply println x)))
;; (defmacro define-var
;; [key]
;; `(def ^:dynamic (symbol (name ~key)) false))
;; (defmacro define-levels
;; [levels]
;; `(do
;; ~@(mapv
;; (fn [level]
;; `(def ^:dynamic ~(symbol (name level)) false))
;; levels)))
;; (def log-levels
;; [:*debug*
;; :*trace*
;; :*info*
;; :*warn*
;; :*error*])
;; (defmacro define-levels
;; [levels]
;; (mapv
;; (fn [level]
;; `(def ^:dynamic (symbol (name @level)) false)`
;; [level ((comp resolve symbol name) level)])
;; levels))
;; (defn app
;; [config]
;; (when *info*
;; (println "info level engaged"))
;; (when *error*
;; (println "error level engaged")))
;; (defn top-level
;; [config log-levels]
;; (let [level (get-in config [:log :level])
;; levels (define-levels log-levels)
;; bindings (log-level levels level)]
;; (with-bindings levels
;; (app config))))