我过去曾使用Clojure进行日志记录,没有任何问题。突然之间,在以前一直很好的服务器上,它无法正常工作。
这是最简单的项目,没有额外的依赖项和配置:
project.clj
(defproject test "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/tools.logging "0.3.1"]]
:main ^:skip-aot test.core
:target-path "target/%s")
src/test/core.clj
(ns test.core
(:require [clojure.tools.logging :as log]))
(defn -main
[& args]
(log/info "Hello INFO logger!")
(log/debug "Hello DEBUG logger!")
(log/warn "Hello WARN logger!")
(println "Hello, STDOUT!")
(binding [*out* *err*]
(println "Hello, STDERR!")))
当我运行它时:
$ lein run
Hello, STDOUT!
Hello, STDERR!
我可以开始添加额外的日志配置,但我很困惑,最小的例子不再有效。
$ java -version
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)
当然,它适用于我的开发机器(Mac OS上的1.8.0)......
编辑:
由于配置java.util.logging
(这是clojure.tools.logging
的最后一行备用),因此看起来像我们这样,因为未配置的java.util.logging.Logger
也不会写入stdout,但是当有ConsoleHandler
时会这样做。
尽管如此,我认为这是一个有效的Clojure问题,因为它涉及clojure.tools.logging
的默认行为。