2010-04-23 16 views
3

使用clojure,我已經能夠使用此log4j.properties文件非常簡單地成功設置log4j,並且在我的類路徑中包括log4j。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 

我認爲這是可能的,可能很簡單。怎麼樣?

非常感謝。

回答

2

使用enumeration-seq,而不是seq

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

對於好奇,org.apache.log4j.LogManager.getCurrentLoggers()返回java.util.Enumeration; seq不知道如何操作,但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) 
+0

感謝您的答覆! – 2010-04-23 06:19:09

相關問題