繁体   English   中英

与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 Fizz {
    Logger log = LoggerFactory.getLogger(Fizz)

    void doSomething() {
      log.info("We're doing something now...")
    }
}

到目前为止,我真的很想念这个。

我想知道是否可以使用traits / mixins来做到这一点,但是它必须是通用的,因此我可以将其用于任何类:

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日志记录的全部功能-再加上一些宏以节省您键入if (log.is_LEVEL_Enabled) log._LEVEL_ (但仍将其放在最终输出中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM