Clojure:
Ghi vào lỗi chuẩn
Làm thế nào:
Để viết vào lỗi chuẩn trong Clojure, bạn sẽ sử dụng binding
với *err*
. Dưới đây là một ví dụ nhanh:
(binding [*err* *out*]
(println "Điều này sẽ đi đến lỗi chuẩn"))
Mẫu đầu ra (trong shell của bạn):
$ clj your_script.clj 2> error.log
$ cat error.log
Điều này sẽ đi đến lỗi chuẩn
Đoạn mã này liên kết *err*
với *out*
, là đầu ra chuẩn, để bạn có thể thấy những gì thường sẽ đi đến stderr
.
Đào Sâu
Theo lịch sử, các hệ thống Unix có hai luồng đầu ra riêng biệt, stdout
và stderr
, cho các loại dữ liệu khác nhau. Trong Clojure, *out*
đề cập đến stdout
và *err*
đến stderr
. Các lựa chọn thay thế cho binding
bao gồm sử dụng Java interop trực tiếp (ví dụ, (.println System/err "tin nhắn")
). Về mặt triển khai, *err*
là một var động, cho phép liên kết cục bộ theo thread - một điểm tinh tế có thể ảnh hưởng đến cách lỗi được ghi trong các ứng dụng đồng thời.
Xem Thêm
- Tài liệu Clojure về
*err*
: https://clojuredocs.org/clojure.core/err - Tài liệu Clojure về
binding
: https://clojuredocs.org/clojure.core/binding - API Java cho
PrintStream
(màSystem/err
là): https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html
Để hiểu rõ hơn về các luồng chuẩn, những tài liệu sau cũng có thể hữu ích:
- Wikipedia về Luồng Chuẩn: https://en.wikipedia.org/wiki/Standard_streams
- Tài liệu về luồng chuẩn Unix:
man stdio