2016-12-04 3 views
1

Timbreで同じ名前空間から2つの異なるファイルにログを記録しようとしています。または、それが可能でない場合、少なくとも2つの異なる名前空間からの異なるファイル。Timbreで2つのファイルにロギング

検査timbre/*config*このような設定を行うには、2つの設定マップが必要になるという印象を受けます。私は別の設定マップを作成して、標準設定マップの代わりにtimbre/log*と使用することができますが、これがどのように使用されるはずではないという気持ちを払拭することはできません...?

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

答えて

2

私の知る限り、最も簡単な方法は、2つの設定マップを作成するには確かにある:

(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

関連する問題