Dưới đây là hai câu mà dường như thường được chấp nhận, nhưng mà tôi có thể không thực sự vượt qua:Ghi lại tham số trong slf4j - nó so sánh như thế nào với các tham số bằng tên của scala?
1) Scala bằng tên params duyên dáng thay thế luôn cái khó chịu sử dụng log4j mẫu:
if (l.isDebugEnabled()) {
logger.debug("expensive string representation, eg: godObject.toString()")
}
vì tham số theo tên (một tính năng ngôn ngữ cụ thể theo Scala) không được đánh giá trước khi gọi phương thức.
2) Tuy nhiên, vấn đề này được giải quyết bằng cách khai thác gỗ parametrized trong slf4f:
logger.debug("expensive string representation, eg {}:", godObject[.toString()]);
Vì vậy, làm thế nào để làm việc này? Có một số phép thuật cấp thấp liên quan đến thư viện slf4j ngăn cản việc đánh giá tham số trước khi thực hiện phương thức "gỡ lỗi" không? (thậm chí có thể không? Có thể một thư viện tác động đến một khía cạnh cơ bản của ngôn ngữ?)
Hoặc thực tế đơn giản là một đối tượng được chuyển sang phương thức - chứ không phải là một chuỗi? (và có thể toString() của đối tượng đó được gọi trong chính phương thức debug(), nếu có).
Nhưng sau đó, điều đó cũng không đúng đối với log4j? (nó có các phương thức với các tham số Object). Và điều này có nghĩa là nếu bạn truyền một chuỗi - như trong đoạn mã trên, nó sẽ hoạt động giống hệt log4j?
Tôi thực sự muốn có chút ánh sáng nào đó về vấn đề này.
Cảm ơn!
Tinh thể rõ ràng, cảm ơn bạn rất nhiều. Tôi đoán giải thích kỹ lưỡng của bạn bù đắp cho phép thuật mà tôi đã hy vọng và không nhận được. :) – teo