Groovy @Slf4j 注释的 Scala 等价物
Scala equivalent for Groovy @Slf4j annotation
在此处从 Groovy 迁移到 Scala。到目前为止,我真的很喜欢 Scala,但是我马上就错过了我的 @Slf4j
注释,我可以在那里使用:
@Slf4j
class Fizz {
void doSomething() {
log.info("We're doing something now...")
}
}
...和 Groovy 会为我创建一个 SLF4J 记录器并将其注入 Fizz
的字节码。它使我不必在 每个 class:
中执行以下操作
class Fizz {
Logger log = LoggerFactory.getLogger(Fizz)
void doSomething() {
log.info("We're doing something now...")
}
}
到目前为止我真的想念这个。
我想知道我是否可以使用 traits/mixins 来做同样的事情,但它必须是通用的,所以我可以将它与 any [=36] 一起使用=]:
trait MyLogger[T] {
def log = Logger.getLogger(T)
}
然后:
class Fizz extends MyLogger[Fizz] {
def doSomething() : Unit = {
log.info("Doing something now...")
}
}
等这可能吗?如果是这样,我是在接近基地还是远离基地?
事实上,你的特质是正确的:
trait Logging {
lazy val log = Logger.getLogger(getClass.getName)
}
你这样使用它:
class MyStuff extends MySuperClass with Logging {
log.info("Setting up my stuff")
}
事实上,这几乎就是 scala-logging 所做的 - 再加上一些宏来节省您键入 if (log.is_LEVEL_Enabled) log._LEVEL_
(但仍将其放在最终输出中)。
在此处从 Groovy 迁移到 Scala。到目前为止,我真的很喜欢 Scala,但是我马上就错过了我的 @Slf4j
注释,我可以在那里使用:
@Slf4j
class Fizz {
void doSomething() {
log.info("We're doing something now...")
}
}
...和 Groovy 会为我创建一个 SLF4J 记录器并将其注入 Fizz
的字节码。它使我不必在 每个 class:
class Fizz {
Logger log = LoggerFactory.getLogger(Fizz)
void doSomething() {
log.info("We're doing something now...")
}
}
到目前为止我真的想念这个。
我想知道我是否可以使用 traits/mixins 来做同样的事情,但它必须是通用的,所以我可以将它与 any [=36] 一起使用=]:
trait MyLogger[T] {
def log = Logger.getLogger(T)
}
然后:
class Fizz extends MyLogger[Fizz] {
def doSomething() : Unit = {
log.info("Doing something now...")
}
}
等这可能吗?如果是这样,我是在接近基地还是远离基地?
事实上,你的特质是正确的:
trait Logging {
lazy val log = Logger.getLogger(getClass.getName)
}
你这样使用它:
class MyStuff extends MySuperClass with Logging {
log.info("Setting up my stuff")
}
事实上,这几乎就是 scala-logging 所做的 - 再加上一些宏来节省您键入 if (log.is_LEVEL_Enabled) log._LEVEL_
(但仍将其放在最终输出中)。