ja napisałem klasę, która sprawia, że to dużo zabawy w obsłudze ... Tak, że możemy napisać rzeczy jak
log.debug { "some $thing is $that" }
który jest odpowiednik leniwe rejestrowania lambda jak
log.debug("some {} is {}",()->thing,()->that)
Ty nawet nie trzeba ich {}
dla PARAMET erising ciąg, a masz wszystkie oryginalne metody rejestratora jak to jest delegatem ...
tutaj jest klasą dla każdego, kto chciałby go używać ...
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() })
}
}
lub jeśli chcesz aby skorzystać z niesamowitych odniesień do źródła w dziennikach, które można wykonać:
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() })
}
}