【问题标题】:How to access log4j variables in log4j.properties file如何访问 log4j.properties 文件中的 log4j 变量
【发布时间】:2019-05-13 13:32:50
【问题描述】:

我无法从 clojure.clj 文件访问我的 log4j.properties 文件中的变量。

具体来说,我需要能够使用一些 clojure 逻辑来查看我的 log4j.rootLogger 级别设置为什么级别。有没有办法在我的 clj 文件中引用/导入/:要求我的 log4j 文件,以便我可以在 log4jfile 中的变量设置上使用一些逻辑?

我的 log4j.properties 文件中有以下内容。

    log4j.rootLogger=INFO, stdout

我希望能够在我的 exceptions.clj 文件中使用 if 语句来确认我的 log4j.properties 文件中的 log4j.rootlogger 值何时设置为 INFO 或 OFF 或 DEBUG。

    (if (log4j.rootlogger=INFO) (prn "rootlogger is set to info") (prn "rootlogger is set to something else"))

【问题讨论】:

  • 如果您能向我们展示更多详细信息,将会有所帮助。您的项目是如何设置的,您是否有一些示例代码,您至少可以在其中记录一些消息,或者更好地尝试一些实际上不起作用的东西?

标签: clojure log4j


【解决方案1】:

我快速尝试了一下,假设如下:

  • 如果您使用 log4j.properties 配置 Log4j,则意味着您使用的是 Log4j 1.2(顺便说一句,它已达到使用寿命)

我用lein new app log4jdemo 创建了一个新项目,添加了对Log4j JAR 的依赖(从this page 获得工件名称):

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日志级别,但您可以尝试任何其他@ 987654322@):

src/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 也可以,顺便说一句)。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2014-04-24
    • 2021-01-03
    相关资源
    最近更新 更多