Writing to standard error

How to:

In Clojure, you can write to stderr using the *err* stream. Here’s a basic example:

(.write *err* "This is an error message.\n")

Note that after writing a message, you should flush the stream to ensure the message is immediately output:


Sample output to stderr:

This is an error message.

If you’re handling exceptions, you might want to print stack traces to stderr. Use printStackTrace for this:

  ;; Code that might throw an exception
  (/ 1 0)
  (catch Exception e
    (.printStackTrace e *err*)))

For more structured error logging, third-party libraries like timbre can be configured to log to stderr. Here’s a basic setup and usage:

First, add timbre to your dependencies. Then configure it to use stderr:

(require '[taoensso.timbre :as timbre])

(timbre/set-config! [:appenders :standard-out :enabled?] false) ;; Disable stdout logging
(timbre/set-config! [:appenders :spit :enabled?] false) ;; Disable file logging
(timbre/set-config! [:appenders :stderr :min-level] :error) ;; Enable stderr for errors

(timbre/error "An error occurred while processing your request.")

This will direct error-level messages to stderr, making them distinct from standard application output.