用辅助方法封装获得方法的名字
出于调试的目的,我的代码中有一部分我想记录一个方法的名字,如下所示:
val LOG = LogManager.getLogger(SomeClass::class.java.name) //... fun someMethod() { LOG.debug(Thread.currentThread().getStackTrace()[1].getMethodName())
我怎么能把这个作为一个简单而清晰的表达? 就像是:
LOG.debug(getMethodName())
顺便说一下,我尝试过使用AspectJ,但是我使用Eclipse,Kotlin插件与1.1.1一起使用。 AspectJ将需要KAPT(据我所知),它不适用于1.1.1的Maven(我也在使用它)。
你可以在Thread上定义一个扩展函数,给你第一个方法:
fun Thread.firstStackMethod() = stackTrace[1].methodName
然后像这样调用它:
LOG.debug(Thread.currentThread().firstStackMethod())
也许你甚至可以直接扩展Logger:
fun Logger.debugMethodName(t: Thread) = debug(t.stackTrace[1].methodName) //use LOG.debugMethodName(Thread.currentThread())
你可以在文件级创建一个函数。
fun getMethodName(): String = Thread.currentThread().stackTrace[1].methodName class Foo { ... }
通过调整stackTrace
号码,你可以得到你想要的级别。