Я быстро попробовал предположить следующее:
- Если вы конфигурируете Log4j с использованием
log4j.properties
, это означает, что вы используете Log4j 1.2 (который достиг конца срока службы BTW)
Я создал новый проект с lein new app log4jdemo
, добавил зависимость от JAR Log4j (получил имя артефакта от этой страницы ):
project.clj
(defproject log4jdemo "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
:url "https://www.eclipse.org/legal/epl-2.0/"}
:dependencies [[org.clojure/clojure "1.10.0"]
[log4j/log4j "1.2.17"]]
:main ^:skip-aot log4jdemo.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
Затем я изменил файл core.clj
, сгенерированный из шаблона, следующим образом:
SRC / log4jdemo / core.clj
(ns log4jdemo.core
(:gen-class)
(:import [org.apache.log4j Logger]))
(defn get-logging-level []
(-> (Logger/getRootLogger)
.getEffectiveLevel
str))
(defn -main
[& args]
(println "Effective level:" (get-logging-level)))
Наконец, давайте добавим файл конфигурации. Обратите внимание, что файл свойств должен быть помещен в папку src
, чтобы при объединении всего объекта его можно было найти как ресурс (я использую уровень журнала WARN
, но вы можете попробовать любой другой Уровень ):
ЦСИ / log4j.properties
log4j.rootLogger=WARN, stdout
Наконец, мы строим проект как Uberjar и запускаем его:
$ lein uberjar
Compiling log4jdemo.core
Created /tmp/log4jdemo/target/uberjar/log4jdemo-0.1.0-SNAPSHOT.jar
Created /tmp/log4jdemo/target/uberjar/log4jdemo-0.1.0-SNAPSHOT-standalone.jar
$ java -jar target/uberjar/log4jdemo-0.1.0-SNAPSHOT-standalone.jar
log4j:ERROR Could not find value for key log4j.appender.stdout
log4j:ERROR Could not instantiate appender named "stdout".
Effective level: WARN
... и это правильно, в примере для файла свойств Log4j было задано значение WARN (lein run
также будет работать, кстати).