log4j: изменить формат регистраторов, настроенных в другой библиотеке - PullRequest
3 голосов
/ 23 апреля 2010

Используя 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

Я предполагаю, что это возможно как-то, и, вероятно, очень просто.Как?

Большое спасибо.

1 Ответ

2 голосов
/ 23 апреля 2010

Используйте 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)
...