Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 以音色记录两个文件_Clojure_Timbre - Fatal编程技术网

Clojure 以音色记录两个文件

Clojure 以音色记录两个文件,clojure,timbre,Clojure,Timbre,我正在尝试使用Timbre从同一名称空间登录到两个不同的文件。或者,如果不可能,至少可以从两个不同的名称空间复制到不同的文件 检查timbre/*config*我得到的印象是,我需要两个配置映射来配置类似的东西。我可以创建另一个配置图,并将其与timbre/log*一起使用,以取代标准配置图,但我无法摆脱这样的感觉:它不是应该如何使用的 (timbre/log* timbre/*config* :info "Test with standard config") 好的,最简单的方法就是创建两个

我正在尝试使用Timbre从同一名称空间登录到两个不同的文件。或者,如果不可能,至少可以从两个不同的名称空间复制到不同的文件

检查
timbre/*config*
我得到的印象是,我需要两个配置映射来配置类似的东西。我可以创建另一个配置图,并将其与
timbre/log*
一起使用,以取代标准配置图,但我无法摆脱这样的感觉:它不是应该如何使用的

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

好的,最简单的方法就是创建两个配置映射:

(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") )
第二种方法是从spit appender编写自己的appender:


我想知道如何使用with config。谢谢,这个有用!
(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))))))))})