如何让kotlin日志(MicroUtils)打印到子类名称而不是抽象类名称?
我使用的是kotlin logging(),我希望我的记录器打印到子类名称而不是抽象类名称。例如,我有这些课程如何让kotlin日志(MicroUtils)打印到子类名称而不是抽象类名称?,kotlin,logging,slf4j,kotlin-logging,Kotlin,Logging,Slf4j,Kotlin Logging,我使用的是kotlin logging(),我希望我的记录器打印到子类名称而不是抽象类名称。例如,我有这些课程 // in A.kt file: import mu.KotlinLogging private val logger = KotlinLogging.logger {} abstract class A<T> { fun someMethod(item: T?) { logger.info("testing") } } fun
// in A.kt file:
import mu.KotlinLogging
private val logger = KotlinLogging.logger {}
abstract class A<T> {
fun someMethod(item: T?) {
logger.info("testing")
}
}
fun main() {
val b: A<String> = B()
b.someMethod("123")
}
// in B.kt file
import mu.KotlinLogging
private val logger = KotlinLogging.logger {}
class B : A<String>() {
}
//在.kt文件中:
导入mu.KotlinLogging
private val logger=KotlinLogging.logger{}
抽象A类{
有趣的方法(项目:T?){
logger.info(“测试”)
}
}
主要内容(){
val b:A=b()
b、 somethod(“123”)
}
//在B.kt文件中
导入mu.KotlinLogging
private val logger=KotlinLogging.logger{}
B类:A(){
}
它打印:[main]信息A-测试
但是我希望它打印:[main]INFO B-testing(其中B是子类名称)您可能希望将记录器发送到抽象类
// in A.kt file:
import mu.KotlinLogging
abstract class A<T>(private val logger: KLogger) {
fun someMethod(item: T?) {
logger.info("testing")
}
}
fun main() {
val b: A<String> = B()
b.someMethod("123")
}
// in B.kt file
import mu.KotlinLogging
private val logger = KotlinLogging.logger {}
class B : A<String>(logger) {
}
//在.kt文件中:
导入mu.KotlinLogging
抽象A类(专用val记录器:KLogger){
有趣的方法(项目:T?){
logger.info(“测试”)
}
}
主要内容(){
val b:A=b()
b、 somethod(“123”)
}
//在B.kt文件中
导入mu.KotlinLogging
private val logger=KotlinLogging.logger{}
B类:A(记录器){
}
结果:
[main]INFO B-测试
如果记录器在抽象类A中,则可以使用记录器(名称:String)方法而不是记录器(func:()->Unit)方法,如下所示:
// in A.kt file
import mu.KotlinLogging
abstract class A<T> {
private val logger = KotlinLogging.logger("${this::class.java.name}")
fun someMethod(item: T?) {
logger.info("testing")
}
}
fun main() {
val b: A<String> = B()
b.someMethod("123")
}
// in B.kt file
class B : A<String>() {
}
结果是AKt$funcJavaClass$1
,因此当我们在此处切片名称时:
结果就是A
还值得注意的是,原始示例使用A
,是因为文件名是A,而不是因为类
// in R.kt
import mu.KotlinLogging
private val funcJavaClass: String = {}.javaClass.name
abstract class A<T> {
private val logger = KotlinLogging.logger("${this::class.java.name}")
fun someMethod(item: T?) {
logger.info("$funcJavaClass")
logger.info("testing")
}
}
结果:
A$funcJavaClass$1
打印抽象类通常是更好的做法,因为日志记录器应该清楚地指示日志打印的位置。
// in R.kt
import mu.KotlinLogging
private val funcJavaClass: String = {}.javaClass.name
abstract class A<T> {
private val logger = KotlinLogging.logger("${this::class.java.name}")
fun someMethod(item: T?) {
logger.info("$funcJavaClass")
logger.info("testing")
}
}
// in R.kt
import mu.KotlinLogging
abstract class A<T> {
private val logger = KotlinLogging.logger("${this::class.java.name}")
private val funcJavaClass: String = {}.javaClass.name
fun someMethod(item: T?) {
logger.info("$funcJavaClass")
logger.info("testing")
}
}