2010-04-23 2 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 

은 그런 : clojure.contrib.logging를 use'ing, 내가 원하는 서식 성명을 인쇄 할 수 있어요과 같이 예상대로 :

(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

감사합니다! –