如何在Clojure中打印到STDERR?

时间:2014-02-25 16:56:03

标签: clojure

println函数写入STDOUT。我们如何才能将消息写入STDERR

(println "Hello, STDOUT!")

3 个答案:

答案 0 :(得分:24)

没有特定的功能,但是您可以动态重新绑定保存println写入的流的var,如下所示:

(println "Hello, STDOUT!")

(binding [*out* *err*]
  (println "Hello, STDERR!"))

在我的REPL中,颜色表示流(红色是STDERR):

enter image description here

答案 1 :(得分:14)

普通Java方法工作正常,Clojure新手很容易理解:

(.println *err* "Hello, STDERR!")

另一种选择,只是为了好玩,是clojure.java.io/copy

(require '[clojure.java.io :as cjio])

(cjio/copy "Hello, STDERR!\n" *err*)
(.flush *err*)

答案 2 :(得分:0)

如果您正在记录,则另一个选项是使用日志库,例如clojure/tools.logging。这提供了一个很好的语法:

(require [clojure.tools.logging :as log])
(log/error "There was an error here")

它还提供了一些格式化功能,以及类似跟踪的spy函数,但可以给出不同的日志级别。