Skip to content

Commit f8c7406

Browse files
committed
Event filters: introduce :loggers-blocklist
Fixes #13
1 parent 6f2cdc5 commit f8c7406

File tree

5 files changed

+40
-9
lines changed

5 files changed

+40
-9
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* Introduce `logjam.appender.default-event-size` configuration option.
66

77
* Event filters: rename `:loggers` to `:loggers-allowlist`
8+
* [#13](https://github.com/clojure-emacs/logjam/issues/13): Event filters: introduce `:loggers-blocklist`.
9+
* Event filters: rename `:loggers` to `:loggers-allowlist`.
810
* `:loggers` will remain supported.
911

1012
## 0.2.0 (2024-01-04)

README.md

+10-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ certain events.
5858
Log events can be searched, streamed to a client or viewed in CIDER's
5959
Inspector and Stacktrace Mode. When searching log events the user can
6060
specify a set of filters. Events that match the filters are shown in
61-
the `+*cider-log*+` buffer. Additionally a log consumer will be
61+
the `*cider-log*` buffer. Additionally a log consumer will be
6262
attached to the appender to receive log events matching the search
6363
criteria after the search command has been issued. The log appender
6464
will be removed automatically once a new search has been submitted or
@@ -71,6 +71,15 @@ consumers. They also take effect when searching events or streaming
7171
them to clients. If multiple filters are chosen they are combined
7272
using logical AND condition. The following filters are available:
7373

74+
* `exceptions`
75+
* `level`
76+
* `pattern`
77+
* `start-time`
78+
* `end-time`
79+
* `threads`
80+
* `loggers-allowlist`
81+
* `loggers-blocklist`
82+
7483
## Usage
7584

7685
Logjam is used by [CIDER](https://cider.mx/)'s [LogMode](https://docs.cider.mx/cider/debugging/logging.html), but can also be used in a

src/logjam/event.clj

+9-6
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
(defn search-filter
2828
"Return a predicate function that computes if a given event matches the search criteria."
29-
[levels {:keys [end-time exceptions level pattern start-time threads loggers loggers-allowlist]}]
29+
[levels {:keys [end-time exceptions level pattern start-time threads loggers loggers-allowlist loggers-blocklist]}]
3030
(let [exceptions (set exceptions)
3131
level->weight (into {} (map (juxt :name :weight) levels))
3232
level-weight (when (or (string? level) (keyword? level))
@@ -37,22 +37,25 @@
3737
(set loggers) ;; legacy name
3838
(set loggers-allowlist) ;; newer name (same semantics)
3939
)
40+
loggers-blocklist (set loggers-blocklist)
4041
threads (set threads)
4142
pattern (cond
4243
(string? pattern)
4344
(try (re-pattern pattern) (catch Exception _))
4445
(instance? Pattern pattern)
4546
pattern)]
46-
(if (or (seq exceptions) (seq loggers) (seq threads) level-weight pattern start-time end-time)
47+
(if (or (seq exceptions) (seq loggers) (seq loggers-blocklist) (seq threads) level-weight pattern start-time end-time)
4748
(fn [event]
48-
(and (or (empty? exceptions)
49-
(contains? exceptions (some-> event :exception exception-name)))
50-
(or (nil? level-weight)
51-
(>= ^long (level->weight (:level event)) ^long level-weight))
49+
(and (or (empty? loggers-blocklist)
50+
(not (contains? loggers-blocklist (:logger event))))
5251
(or (empty? loggers)
5352
(contains? loggers (:logger event)))
5453
(or (empty? threads)
5554
(contains? threads (:thread event)))
55+
(or (empty? exceptions)
56+
(contains? exceptions (some-> event :exception exception-name)))
57+
(or (nil? level-weight)
58+
(>= ^long (level->weight (:level event)) ^long level-weight))
5659
(or (not pattern)
5760
(some->> event :message (re-matches pattern)))
5861
(or (not (nat-int? start-time))

test/logjam/event_test.clj

+14-1
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@
5959
(let [opts {:filters {:loggers loggers}}
6060
events-found (event/search levels opts events)]
6161
(set/subset? (set (map :logger events-found))
62-
(set (map :logger events))))))
62+
(set (map :logger events)))))))
6363

64+
(defspec test-search-loggers-allowlist
6465
(testing "`:loggers-allowlist` (newer key)"
6566
(prop/for-all
6667
[{:keys [levels]} (gen/elements frameworks)
@@ -71,6 +72,18 @@
7172
(set/subset? (set (map :logger events-found))
7273
(set (map :logger events)))))))
7374

75+
(defspec test-search-loggers-blocklist
76+
(testing "`:loggers-blocklist`"
77+
(prop/for-all
78+
[[events framework] (gen/let [framework (gen/elements frameworks)
79+
events (gen/vector (test/event-gen framework) 10)]
80+
[events framework])]
81+
(let [blocklist (->> events (take 5) (map :logger))
82+
opts {:filters {:loggers-blocklist blocklist}}
83+
events-found (event/search (:levels framework) opts events)]
84+
(not-any? (set blocklist)
85+
(map :logger events-found))))))
86+
7487
(defspec test-search-limit
7588
(prop/for-all
7689
[{:keys [levels]} (gen/elements frameworks)

test/logjam/specs.clj

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
(s/def :logjam.filter/loggers-allowlist :logjam.filter/loggers)
3333

34+
(s/def :logjam.filter/loggers-blocklist :logjam.filter/loggers)
35+
3436
(s/def :logjam.filter/pattern string?)
3537
(s/def :logjam.filter/start-time pos-int?)
3638

@@ -43,6 +45,7 @@
4345
:logjam.filter/level
4446
:logjam.filter/loggers
4547
:logjam.filter/loggers-allowlist
48+
:logjam.filter/loggers-blocklist
4649
:logjam.filter/pattern
4750
:logjam.filter/start-time
4851
:logjam.filter/threads]))
@@ -105,7 +108,8 @@
105108
(s/def :logjam.event/arguments (s/coll-of :logjam.event/argument :kind vector?))
106109
(s/def :logjam.event/id uuid?)
107110
(s/def :logjam.event/level simple-keyword?)
108-
(s/def :logjam.event/logger string?)
111+
(s/def :logjam.event/logger (s/with-gen string?
112+
#(s/gen (s/and string? (complement string/blank?)))))
109113
(s/def :logjam.event/mdc
110114
(s/with-gen map? ;; relaxed spec for Timbre
111115
#(s/gen (s/map-of string? string?)))) ;; strict gen for Logback

0 commit comments

Comments
 (0)