Tôi đã viết một lớp mà làm cho nhiều niềm vui này để sử dụng ... Vì vậy mà chúng ta có thể viết những thứ như
log.debug { "some $thing is $that" }
đó là tương đương với đăng nhập lambda lười biếng như
log.debug("some {} is {}",()->thing,()->that)
Bạn thậm chí không cần những {}
này cho paramet erising chuỗi, và bạn có tất cả các phương pháp logger gốc vì nó là một đại biểu ...
đây là lớp dành cho những ai muốn sử dụng nó ...
import org.apache.logging.log4j.util.Supplier
class Logger(private val logger: org.apache.logging.log4j.Logger) : org.apache.logging.log4j.Logger by logger {
fun info(supplier:() -> String) {
logger.info(Supplier { supplier.invoke() })
}
fun debug(supplier:() -> String) {
logger.debug(Supplier { supplier.invoke() })
}
fun warn(supplier:() -> String) {
logger.warn(Supplier { supplier.invoke() })
}
fun error(supplier:() -> String) {
logger.error(Supplier { supplier.invoke() })
}
fun trace(supplier:() -> String) {
logger.trace(Supplier { supplier.invoke() })
}
}
hoặc nếu bạn muốn để tận dụng các tham chiếu tuyệt vời cho nguồn trong nhật ký, bạn có thể làm
import org.apache.logging.log4j.util.Supplier
class Logger(val logger: org.apache.logging.log4j.Logger) : org.apache.logging.log4j.Logger by logger {
inline fun info(crossinline supplier:() -> String) {
logger.info(Supplier { supplier.invoke() })
}
inline fun debug(crossinline supplier:() -> String) {
logger.debug(Supplier { supplier.invoke() })
}
inline fun warn(crossinline supplier:() -> String) {
logger.warn(Supplier { supplier.invoke() })
}
inline fun error(crossinline supplier:() -> String) {
logger.error(Supplier { supplier.invoke() })
}
inline fun trace(crossinline supplier:() -> String) {
logger.trace(Supplier { supplier.invoke() })
}
}