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/errlà): 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