2016-12-04 3 views
1

팀버와 동일한 네임 스페이스에서 두 개의 다른 파일에 로그온하려고합니다. 적어도 두 개의 서로 다른 네임 스페이스의 다른 파일에 대해서는 가능하지 않습니다.팀버에서 두 파일에 로깅

검사하기 timbre/*config* 나는 그런 식으로 구성하기 위해 두 개의 구성 맵이 필요하다는 인상을받습니다. 나는 다른 설정 맵을 만들고 표준 설정 맵 대신에 timbre/log*과 함께 사용할 수 있지만 이것이 어떻게 사용되는 것이 아닌가하는 느낌을 떨쳐 낼 수는 없다 ...?

(timbre/log* timbre/*config* :info "Test with standard config") 

답변

2

AFAIK는 가장 쉬운 방법은 두 가지 구성지도를 만들 참이다 :

(def config1 
    {:level :debug 
    :appenders {:spit1 (appenders/spit-appender {:fname "file1.log"})}}) 

(def config2 
    {:level :debug 
    :appenders {:spit2 (appenders/spit-appender {:fname "file2.log"})}}) 

(timbre/with-config config1 
    (info "This will print in file1")) 

(timbre/with-config config2 
    (info "This will print in file2")) 

두 번째 방법은 침 - 펜더에서 자신의 펜더를 작성하는 것입니다 :

https://github.com/ptaoussanis/timbre/blob/master/src/taoensso/timbre/appenders/core.cljx

(defn my-spit-appender 
    "Returns a simple `spit` file appender for Clojure." 
    [& [{:keys [fname] :or {fname "./timbre-spit.log"}}]] 
    {:enabled? true 
    :async?  false 
    :min-level nil 
    :rate-limit nil 
    :output-fn :inherit 
    :fn 
    (fn self [data] 
    (let [{:keys [output_]} data] 
     (try 

     ;; SOME LOGIC HERE TO CHOOSE THE FILE TO OUTPUT TO ...    

     (spit fname (str (force output_) "\n") :append true) 
     (catch java.io.IOException e 
      (if (:__spit-appender/retry? data) 
      (throw e) ; Unexpected error 
      (let [_ (have? enc/nblank-str? fname) 
        file (java.io.File. ^String fname) 
        dir (.getParentFile (.getCanonicalFile file))] 

       (when-not (.exists dir) (.mkdirs dir)) 
       (self (assoc data :__spit-appender/retry? true))))))))}) 
+1

with-config를 사용하는 방법이 궁금합니다. 고마워,이 작품! – Domchi