diff --git a/test/metabase/logger_test.clj b/test/metabase/logger_test.clj index 6f9d1d594b8e51d016341d5e3ad3b44e0371d651..055e3f9f63b651d356659dec55bd321aff2c45e6 100644 --- a/test/metabase/logger_test.clj +++ b/test/metabase/logger_test.clj @@ -18,7 +18,19 @@ ;; it either increases (could have many logs from other tests) or it is the max capacity of the ring buffer (is (or (> after before) (= before (var-get #'mb.logger/max-log-entries))) - "In memory ring buffer did not receive log message")))))) + "In memory ring buffer did not receive log message"))))) + + (testing "set isAdditive = false if parent logger is root to prevent logging to console (#26468)" + (testing "make sure it's true to starts with" + (is (true? (.isAdditive (log.impl/get-logger log/*logger-factory* 'metabase))))) + + (testing "set to false if parent logger is root" + (mt/with-log-level :warn + (is (false? (.isAdditive (log.impl/get-logger log/*logger-factory* 'metabase)))))) + + (testing "still true if the parent logger is not root" + (mt/with-log-level [metabase.logger :warn] + (is (true? (.isAdditive (log.impl/get-logger log/*logger-factory* 'metabase.logger)))))))) (deftest logger-test (testing "Using log4j2 logger" diff --git a/test/metabase/test/util/log.clj b/test/metabase/test/util/log.clj index 78db3931c5f01423b14d4a5e04336da04ad2ddd1..d6959f5d6e2ab5dbc5400aaa9a2680364746e2cf 100644 --- a/test/metabase/test/util/log.clj +++ b/test/metabase/test/util/log.clj @@ -112,11 +112,21 @@ (defn do-with-log-level [a-namespace level thunk] (test-runner.parallel/assert-test-is-not-parallel "with-log-level") - (let [original-log-level (ns-log-level a-namespace)] + (ensure-unique-logger! a-namespace) + (let [original-log-level (ns-log-level a-namespace) + logger (exact-ns-logger a-namespace) + is-additive (.isAdditive logger) + parent-is-root? (= "" (-> logger .getParent .getName))] (try + ;; prevent events to be passed to the root logger's appenders which will log to the Console + ;; https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity + (when parent-is-root? + (.setAdditive logger false)) (set-ns-log-level! a-namespace level) (thunk) (finally + (when parent-is-root? + (.setAdditive logger is-additive)) (set-ns-log-level! a-namespace original-log-level))))) (defmacro with-log-level