-
Notifications
You must be signed in to change notification settings - Fork 0
/
clj_logback_event_evaluator.clj
46 lines (39 loc) · 1.51 KB
/
clj_logback_event_evaluator.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
(ns dataflocks.clj-logback-event-evaluator
(:gen-class
:name dataflocks.CljLogbackEventEvaluator
:extends ch.qos.logback.core.boolex.EventEvaluatorBase
:state state
:init init
:exposes-methods {start parentStart}
:constructors {[] []}
:methods [[setExpression [String] void]])
(:import [ch.qos.logback.classic.spi ILoggingEvent]))
(defn event->map [^ILoggingEvent e]
{:mdc (.getMDCPropertyMap e)
:level (str (.getLevel e))
:msg (.getMessage e)
:fmt-msg (.getFormattedMessage e)
:logger-name (.getLoggerName e)
:thread-name (.getThreadName e)
:marker (.getMarker e)
:timestamp (.getTimeStamp e)
:event e})
(defn -init []
[[]
(atom {:expression nil
:fn nil})])
(defn -setExpression [^dataflocks.CljLogbackEventEvaluator this ^java.lang.String expression]
(swap! (.state this) assoc :expression expression))
(defn -getExpression [^dataflocks.CljLogbackEventEvaluator this]
(:expression @(.state this)))
(defn mk-evaluator-fn [str]
(eval `(fn [{:keys [~'mdc ~'level ~'msg ~'fmt-msg ~'logger-name ~'thread-name ~'marker ~'timestamp ~'event]}]
(boolean ~(read-string str)))))
(defn -start [^dataflocks.CljLogbackEventEvaluator this]
(.parentStart this)
(swap! (.state this)
(fn [v]
(assoc v :fn (mk-evaluator-fn (:expression v))))))
(defn -evaluate [^dataflocks.CljLogbackEventEvaluator this ^ILoggingEvent e]
(let [evaluator-fn (:fn @(.state this))]
(evaluator-fn (event->map e))))