簡體   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