This repository has been archived by the owner on Jun 3, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.cljs
77 lines (60 loc) · 1.87 KB
/
log.cljs
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
(ns re-conf.resources.log
"Logging facade"
(:require-macros
[clojure.core.strint :refer (<<)])
(:require
[clojure.string :refer (replace-first)]
[cljs.core.async :as async :refer [take!]]))
(def winston (js/require "winston"))
(def os (js/require "os"))
(def hostname (.hostname os))
(defn channel?
"check is x is a channel"
[x]
(= (type x) cljs.core.async.impl.channels/ManyToManyChannel))
(defn settings [level]
(let [f (clj->js {"filename" "re-conf.log" "colorize" true})]
(clj->js
{:level level
:format (winston.format.combine (winston.format.timestamp) (winston.format.json))
:transports [(winston.transports.File. f)]})))
(defn console-format []
(winston.format.printf
(fn [info]
(let [date (.toLocaleString (js/Date.))
level (.-level info)
n (replace-first (name (.-ns info)) ":" "")
message (.-message info)
out (if (string? message) message (.stringify js/JSON message nil 1))]
(<< "~{date} ~{hostname} ~{level} [~{n}] - ~{out}")))))
(defn setup-logger [level]
(let [base (.createLogger winston (settings level))
fmt (winston.format.combine (winston.format.colorize) (console-format))]
(.add base (winston.transports.Console. (clj->js {:format fmt})))))
(def logger (atom (setup-logger "info")))
(defn debug-on []
(reset! logger (setup-logger "debug")))
(defn debug-off []
(reset! logger (setup-logger "info")))
(defn- winston-log
"Using Winston to log"
[m n level]
(.log @logger (clj->js {:level level :message m :ns (str n)})))
(defn- log
[m n level]
(if (channel? m)
(take! m (fn [o] (winston-log o n level)))
(winston-log m n level)))
(defn error
[m n]
(log m n "error"))
(defn info
[m n]
(log m n "info"))
(defn debug
[m n]
(log m n "debug"))
(comment
(info {:fo 1 :bla 2 :biiiggg ""} ::log)
(error "bla" ::log)
(debug-on))