【问题标题】:log4j: Change format of loggers configured in another librarylog4j:更改在另一个库中配置的记录器的格式
【发布时间】:2010-04-23 00:36:29
【问题描述】:

使用 clojure,我已经能够非常简单地成功设置 log4j,只需使用这个 log4j.properties 文件,并将 log4j 包含在我的类路径中。

# BEGIN log4j.properties

log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%d{MMdd HHmmss SSS} %5p %c [%t] %m\n

log4j.rootLogger=DEBUG, STDOUT

然后在 :use'ing clojure.contrib.logging 之后,我可以按预期打印具有所需格式的语句,如下所示:

(info "About to print this")
(debug "This is debug-level")

我的问题是如何为其他库中配置的记录器生成的记录语句实现一致的格式。我以为我可以使用 org.apache.log4j.LogManager.getCurrentLoggers() 找到现有的记录器并在那里更改 PatternLayouts,但我无法在 clojure 中迭代该枚举,因为我收到以下错误:

Dont know how to create ISeq from: java.util.Vector$1

我认为这是可能的,而且可能非常简单。怎么样?

非常感谢。

【问题讨论】:

    标签: logging clojure log4j


    【解决方案1】:

    使用enumeration-seq 代替seq

    (enumeration-seq (org.apache.log4j.LogManager/getCurrentLoggers))
    

    对于好奇的人,org.apache.log4j.LogManager.getCurrentLoggers() 返回一个java.util.Enumerationseq 不知道如何操作,但 enumeration-seq 知道。

    一个不涉及日志记录的简单案例:

    (seq (.elements (java.util.Vector. [1 2 3]))
    ; => throws an exception
    
    (enumeration-seq (.elements (java.util.Vector. [1 2 3])))
    ; => returns (1 2 3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多