Skip to content

Instantly share code, notes, and snippets.

@plexus
Created November 14, 2019 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plexus/1bf76fb6eb8f5217062db5b0f15e1167 to your computer and use it in GitHub Desktop.
Save plexus/1bf76fb6eb8f5217062db5b0f15e1167 to your computer and use it in GitHub Desktop.
(ns lambdaisland.logback.clojure-filter
(:gen-class
:extends ch.qos.logback.core.filter.Filter
:name lambdaisland.logback.ClojureFilter
:state state
:init init
:constructors {[] []}
:methods [[setExpression [String] void]])
(:import [ch.qos.logback.core.spi FilterReply]))
(def ^:dynamic *event*)
(defonce last-error (atom nil))
(defn -init []
[[] (atom "true")])
(defn -setExpression [this e]
(reset! (.state this) e))
(defn expression [this]
`(do
(in-ns '~(symbol (namespace `_)))
(let [~'event *event*
~'logger-name (.getLoggerName ~'event)
~'level (.getLevel ~'event)
~'message (.getMessage ~'event)
~'marker (.getMarker ~'event)
~'timestamp (.getTimeStamp ~'event)]
~(read-string (str "(do " @(.state this) ")")))))
(defn eval-event [this event]
(if-let [ex @(.state this)]
(binding [*event* event]
(boolean (eval (expression this))))
true))
(defn -decide [this event]
(try
(if (eval-event this event)
FilterReply/NEUTRAL
FilterReply/DENY)
(catch Throwable t
(reset! last-error t)
FilterReply/DENY)))
#_
(compile 'lambdaisland.logback.clojure-filter)
classes
classes/lambdaisland
classes/lambdaisland/logback
classes/lambdaisland/logback/clojure_filter$_setExpression.class
classes/lambdaisland/logback/clojure_filter$loading__6721__auto____126.class
classes/lambdaisland/logback/clojure_filter$expression.class
classes/lambdaisland/logback/clojure_filter__init.class
classes/lambdaisland/logback/clojure_filter$_decide.class
classes/lambdaisland/logback/ClojureFilter.class
classes/lambdaisland/logback/clojure_filter$fn__128.class
classes/lambdaisland/logback/clojure_filter$fn__130.class
classes/lambdaisland/logback/clojure_filter$_init.class
classes/lambdaisland/logback/clojure_filter$eval_event.class
classes/clojure
classes/clojure/core
classes/clojure/core/specs
classes/clojure/core/specs/alpha$fn__63.class
classes/clojure/core/specs/alpha$fn__77$fn__83.class
classes/clojure/core/specs/alpha$fn__8.class
classes/clojure/core/specs/alpha$fn__113$fn__117.class
classes/clojure/core/specs/alpha$fn__65$fn__67.class
classes/clojure/core/specs/alpha$fn__111.class
classes/clojure/core/specs/alpha$fn__22.class
classes/clojure/core/specs/alpha$fn__113.class
classes/clojure/core/specs/alpha$fn__50$fn__56$fn__57.class
classes/clojure/core/specs/alpha$fn__50.class
classes/clojure/core/specs/alpha$fn__11.class
classes/clojure/core/specs/alpha$fn__33.class
classes/clojure/core/specs/alpha$fn__5.class
classes/clojure/core/specs/alpha$fn__93.class
classes/clojure/core/specs/alpha$fn__109.class
classes/clojure/core/specs/alpha$fn__14.class
classes/clojure/core/specs/alpha$fn__27.class
classes/clojure/core/specs/alpha$fn__65$fn__69.class
classes/clojure/core/specs/alpha$fn__113$fn__119$fn__120.class
classes/clojure/core/specs/alpha$fn__77$fn__81.class
classes/clojure/core/specs/alpha$fn__113$fn__119.class
classes/clojure/core/specs/alpha$fn__36.class
classes/clojure/core/specs/alpha$fn__50$fn__54.class
classes/clojure/core/specs/alpha__init.class
classes/clojure/core/specs/alpha$fn__17.class
classes/clojure/core/specs/alpha$even_number_of_forms_QMARK_.class
classes/clojure/core/specs/alpha$fn__50$fn__56.class
classes/clojure/core/specs/alpha$fn__90.class
classes/clojure/core/specs/alpha$fn__101.class
classes/clojure/core/specs/alpha$fn__113$fn__115.class
classes/clojure/core/specs/alpha$fn__46.class
classes/clojure/core/specs/alpha$fn__104.class
classes/clojure/core/specs/alpha$loading__6721__auto____3.class
classes/clojure/core/specs/alpha$fn__30.class
classes/clojure/core/specs/alpha$fn__43.class
classes/clojure/core/specs/alpha$fn__77$fn__83$fn__84.class
classes/clojure/core/specs/alpha$quotable.class
classes/clojure/core/specs/alpha$fn__25.class
classes/clojure/core/specs/alpha$fn__77$fn__79.class
classes/clojure/core/specs/alpha$fn__50$fn__52.class
classes/clojure/core/specs/alpha$fn__98.class
classes/clojure/core/specs/alpha$fn__65.class
classes/clojure/core/specs/alpha$fn__20.class
classes/clojure/core/specs/alpha$fn__40.class
classes/clojure/core/specs/alpha$fn__48.class
classes/clojure/core/specs/alpha$fn__106.class
classes/clojure/core/specs/alpha$fn__65$fn__71$fn__72.class
classes/clojure/core/specs/alpha$fn__96.class
classes/clojure/core/specs/alpha$fn__65$fn__71.class
classes/clojure/core/specs/alpha$fn__77.class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment