Clojure:
Schrijven naar standaardfout
Hoe:
Om naar de standaardfout in Clojure te schrijven, gebruik je binding met *err*. Hier is een snel voorbeeld:
(binding [*err* *out*]
(println "Dit gaat naar de standaardfout"))Voorbeeld van output (in je shell):
$ clj your_script.clj 2> error.log
$ cat error.log
Dit gaat naar de standaardfoutDit fragment bindt *err* aan *out*, wat de standaarduitvoer is, zodat je kunt zien wat typisch naar stderr zou gaan.
Diepere Duik
Historisch gezien hadden Unix-systemen twee afzonderlijke uitvoerstromen, stdout en stderr, voor verschillende datatypes. In Clojure verwijst *out* naar stdout en *err* naar stderr. Alternatieven voor binding omvatten het direct gebruiken van Java interop (bv. (.println System/err "bericht")). Wat betreft implementatie, *err* is een dynamische var, wat toelaat voor thread-lokale bindingen — een nuance die kan beïnvloeden hoe fouten worden gelogd in gelijktijdige applicaties.
Zie Ook
- Clojure Docs over
*err*: https://clojuredocs.org/clojure.core/err - Clojure Docs over
binding: https://clojuredocs.org/clojure.core/binding - Java API voor
PrintStream(waarSystem/erreen voorbeeld van is): https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html
Voor een breder begrip van standaardstromen kunnen de volgende bronnen ook nuttig zijn:
- Wikipedia over Standaardstromen: https://nl.wikipedia.org/wiki/Standaardstromen
- De Unix standaardstromen documentatie:
man stdio