在Java中我会写logger.getLogger(NameOfClass.class)
。如何在Scala中编写相同的内容?
答案 0 :(得分:9)
你可以尝试:
logger.getLogger(getClass())
或:
logger.getLogger(classOf[NameOfClass])
作为旁注,ScalaLogging提供了一种简单易用的方法来使用具有类名的记录器,但没有像普通java那样的所有样板文件。您可以在类设置中正确获取记录器,所有您需要做的就是扩展特征Logging
:
class MyClass extends Logging {
logger.debug("This is very convenient ;-)")
}
答案 1 :(得分:1)
不要忘记在单身伴侣对象上定义记录器:
object MyClass {
// Commons logging
private val clLogger = LogFactory.getLog(getClass())
// java.util.logging
private val juLogger = Logger.getLogger(getClass().toString)
}
class MyClass {
import MyClass._
...
}
一个人应该这样做的原因是,如果你将字段放在class
上,那么它就是一个实例字段,它返回到该类对象的每个new
实例上的记录器工厂。对于某些类,这可能是不必要/不可接受的性能。
在这种情况下,Scala将类(静态)字段和实例字段分开,这使得它比使用Java更加艰巨。其中一个Scala没有所有优势的情况:
class MyClass {
// Commons logging
private static final Log clLogger = LogFactory.getLog(MyClass.class)
// java.util.logging
private static final Logger juLogger = Logger.getLogger(MyClass.class.toString)
...
}