【发布时间】:2017-08-02 11:56:25
【问题描述】:
在这里从 Groovy 迁移到 Scala。到目前为止,我真的很喜欢 Scala,但是我立即错过了我的 @Slf4j 注释,我本来可以:
@Slf4j
class Fizz {
void doSomething() {
log.info("We're doing something now...")
}
}
...Groovy 会为我创建一个 SLF4J 记录器并将其注入到Fizz 的字节码中。它使我不必在每个类中执行以下操作:
class Fizz {
Logger log = LoggerFactory.getLogger(Fizz)
void doSomething() {
log.info("We're doing something now...")
}
}
到目前为止,我真的很想念这个。
我想知道是否可以使用 traits/mixins 来做同样的事情,但它必须是通用的,所以我可以将它与 any 类一起使用:
trait MyLogger[T] {
def log = Logger.getLogger(T)
}
然后:
class Fizz extends MyLogger[Fizz] {
def doSomething() : Unit = {
log.info("Doing something now...")
}
}
等等。这可能吗?如果是这样,我是关闭还是远离基地?
【问题讨论】:
-
可以由macro annotation实现
-
或者
lazy val log = LoggerFactory.getLogger(getClass.getName)会让您无需传递类型参数。