println
函数写入STDOUT
。我们如何才能将消息写入STDERR
?
(println "Hello, STDOUT!")
答案 0 :(得分:24)
没有特定的功能,但是您可以动态重新绑定保存println
写入的流的var,如下所示:
(println "Hello, STDOUT!")
(binding [*out* *err*]
(println "Hello, STDERR!"))
在我的REPL中,颜色表示流(红色是STDERR):
答案 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
函数,但可以给出不同的日志级别。