tôi sẽ cố gắng đưa hai xu của tôi từ một góc độ
gì chính xác là vì lợi ích của khai thác gỗ parametrized?
Bạn chỉ cần hoãn toString()
gọi và nối chuỗi cho đến khi thực sự cần thiết, đó là khi bạn thực sự cần phải đăng nhập vào tin nhắn. Điều này tối ưu hóa hiệu suất khi hoạt động ghi nhật ký cụ thể đó bị tắt. Kiểm tra source code for SLF4J nếu không chắc chắn.
Ghi nhật ký tham số có giúp bảo vệ vô dụng trong mọi trường hợp không?
số
Trong đó trường hợp sẽ bảo vệ khai thác gỗ được sử dụng?
Khi có các hoạt động đắt tiền tiềm năng khác.
Ví dụ (trong trường hợp hoạt động khai thác gỗ đặc biệt này bị vô hiệu hóa), nếu chúng ta có không bảo vệ khai thác gỗ
logger.debug("User: {}", getUserService().getCurrentUser());
- Chúng tôi sẽ trả chi phí từ
obj = getUserService().getCurrentUser()
- Chúng tôi sẽ tiết kiệm chi phí từ
"User name: " + obj.toString()
Nếu chúng tôi sử dụng khai thác gỗ gác:
if (logger.isDebugEnabled()) {
logger.debug("User: {}", getUserService().getCurrentUser());
}
- Chúng tôi sẽ trả chi phí
logger.isDebugEnabled()
- Chúng tôi sẽ lưu chi phí từ
obj = getUserService().getCurrentUser()
- Chúng tôi sẽ tiết kiệm chi phí từ
"User name: " + obj.toString()
Trong c sau ase, chúng tôi sẽ tiết kiệm cả chi phí ở mức giá kiểm tra isDebugEnabled()
hai lần khi hoạt động ghi nhật ký cụ thể này được bật.
LƯU Ý: Đây chỉ là một ví dụ, không cố gắng tranh luận các thực tiễn tốt/xấu ở đây.
Cảm ơn fgelz, đây là giải thích rõ ràng nhất vì vậy tôi đã thay đổi quyết định của mình. Làm cho bạn nghĩ rằng mặc dù tất cả các khuôn khổ khác nhau, vẫn còn chỗ cho sự đổi mới trong thế giới khai thác, về mặt trì hoãn các hoạt động tốn kém .. có thể với các đại biểu –
@MarkD JDK 8 Dự án Lambda sẽ giúp đổi mới (http: // openjdk .java.net/projects/lambda /) – fglez
Bạn cũng nên lưu ý rằng việc gọi một phương thức varargs (như logger.debug (String, Object ..) thực sự đang thực hiện dưới bìa logger.debug (String, new Object [. Vì vậy, nếu bạn không bọc các cuộc gọi, bạn đang tạo ra (sau đó xử lý) một mảng Object mới mỗi lần bạn đi qua phương thức này, ngay cả khi bạn không bao giờ viết nội dung ra ngoài. hoặc kinh nghiệm áp lực bộ nhớ sau đó điều này có thể xây dựng lên theo thời gian, và các cuộc gọi logger.isDebugEnabled() sẽ được lót bởi một JIT phong nha nếu được sử dụng rất nhiều SLF4J chuyên này cho một và hai đối số, nhưng để biết thêm bạn sẽ nhận được – AlBlue