Cách ghi ngoại lệ và thông báo bằng trình giữ chỗ với SLF4J


85

Cách tiếp cận chính xác để ghi lại cả thông báo lỗi và ngoại lệ bằng SLF4J là gì?

Tôi đã thử làm điều này nhưng dấu vết ngăn xếp ngoại lệ không bao giờ được in:

logger.error("Unable to parse data {}", inputMessage, e);

Trong trường hợp này tôi muốn cư {}với inputMessagecũng như đăng xuất stacktrace ngoại lệ.

Cách duy nhất tôi có thể thấy để làm điều này là làm như sau:

logger.error("Unable to parse data " + inputMessage, e);

không đẹp.


Dòng nắm tay logger.error của bạn hoạt động như bạn muốn trong phiên bản slf4j 1.7.25.
kiml42,

Câu trả lời:


131

Kể từ phiên bản SLF4J 1.6, SLF4J sẽ diễn giải tham số cuối cùng như bạn dự định, tức là như một ngoại lệ. Bạn phải đang sử dụng phiên bản API SLF4J cũ hơn.


7
Điều này có được mô tả trong Javadoc không? Tôi đã mong tìm thấy thông tin tương tự ở đây: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
Tôi tin bạn, nhưng giống như @Scot, tôi hy vọng hành vi này sẽ được ghi lại.
Stephan

4
Scot, @Stephan - hành vi nói trên dường như được ghi lại trong Câu hỏi thường gặp của họ tại đây .
Priidu Neemre

8
Đây giống như một bí mật tốt nhất được giữ kín. Cảm ơn đã chỉ ra điều đó. Câu hỏi tiếp theo của tôi là tại sao họ lại che giấu sự thật rằng điều này có thể xảy ra trong một var-arg? Tại sao họ không thể tạo một phương thức nạp chồng mới có Throwablevà sau đó có var-arg sau đó? Có vấn đề tẩy xóa không? Đây có phải là một tiêu chuẩn trong các thư viện khác để có ngoại lệ được chuyển vào làm đối số cuối cùng không?
gaoagong

7
Điều này đã (kể từ khi?) Được ghi lại trong Câu hỏi thường gặp: slf4j.org/faq.html#paramException . Tôi đồng ý rằng tính năng này nên được ghi lại rõ ràng hơn.
Stephan202
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.