Đây được xem là phương pháp hay. Ví dụ, nếu có một số chuỗi nối nó không được đánh giá và kiểm tra trong log4j, nhưng nó được kiểm tra đầu tiên.
Ví dụ:
if (log.isDebugEnabled()) {
log.debug("N=" + N + ", a=" + Arrays.toString(a));
}
phương pháp Arrays.toString()
và cũng nối không được thực hiện nếu debug không được kích hoạt. Nếu không có if
nó được gọi trước và sau đó được kiểm tra, đó là tất cả ;-)
Ý kiến của tôi là khi có chuỗi đơn giản như trong ví dụ của bạn nếu xung quanh việc ghi nhật ký là không cần thiết, nếu có điều gì phức tạp hơn (thậm chí phức tạp hơn như trong ví dụ của tôi) điều này có thể tiết kiệm một số thời gian CPU trong chế độ sản xuất (không có chế độ gỡ lỗi được kích hoạt). Bạn cũng phải nhận ra rằng trong trường hợp ghép nối có String.valuOf()
gọi (đối tượng không null) gọi phương thức toString()
, có thể thực sự là vấn đề hiệu suất đối với các đối tượng dữ liệu lớn (các bean có nhiều thuộc tính) nếu bạn xem xét nó gọi không logic kinh doanh (do đó nó là "vô ích").
+1 cho SLF4J. Không có nhiều căng thẳng như một tính năng tuyệt vời. – adarshr
mặt khác, chúng ta có thể thảo luận về những gì có hiệu suất tốt hơn - một 'if' (+1 getter) hoặc một số cuộc gọi phương thức để xác định xem debug được kích hoạt hay vô hiệu hóa ... – Betlista