Как печатать на STDERR в Clojure?
Функция println
записывается в STDOUT
. Как мы можем писать сообщения в STDERR
?
(println "Hello, STDOUT!")
Ответы
Ответ 1
Для этого нет никакой конкретной функции, однако вы можете динамически перестроить переменную, содержащую поток, который println
пишет следующим образом:
(println "Hello, STDOUT!")
(binding [*out* *err*]
(println "Hello, STDERR!"))
В моем REPL цвет указывает поток (красный - STDERR):
Ответ 2
Обычные методы Java работают отлично и будут легко понятны новичками Clojure:
(.println *err* "Hello, STDERR!")
Другой альтернативой, просто для удовольствия, является clojure.java.io/copy
:
(require '[clojure.java.io :as cjio])
(cjio/copy "Hello, STDERR!\n" *err*)
(.flush *err*)
Ответ 3
Если вы регистрируетесь, другим вариантом является использование библиотеки журналов, например clojure/tools.logging. Это дает хороший синтаксис:
(require [clojure.tools.logging :as log])
(log/error "There was an error here")
Он также предоставляет некоторые функции форматирования и функции spy
, которые похожи на трассировку, но могут предоставляться различные уровни журналов.