Запись в стандартный поток ошибок

Clojure:
Запись в стандартный поток ошибок

Как это сделать:

Для вывода в стандартный поток ошибок в Clojure используют binding с *err*. Вот простой пример:

(binding [*err* *out*]
  (println "Это пойдет в стандартный поток ошибок"))

Пример вывода (в вашем терминале):

$ clj your_script.clj 2> error.log
$ cat error.log
Это пойдет в стандартный поток ошибок

Этот фрагмент кода связывает *err* с *out*, который является стандартным выводом, так что вы можете видеть, что обычно пойдет в stderr.

Глубокое Погружение

Исторически в системах Unix было два отдельных потока вывода, stdout и stderr, для разных типов данных. В Clojure *out* относится к stdout, а *err* к stderr. Альтернативы использованию binding включают прямое использование Java interop (например, (.println System/err "сообщение")). С точки зрения реализации, *err* является динамической переменной, позволяющей использовать привязки локальные для потока — нюанс, который может влиять на то, как ошибки логируются в приложениях с конкурентностью.

Смотрите Также

Для более широкого понимания стандартных потоков также могут быть полезны следующие источники: