3

在 Java 中我会写logger.getLogger(NameOfClass.class). 如何在 Scala 中编写相同的代码?

4

2 回答 2

9

你可以试试:

logger.getLogger(getClass())

或者:

logger.getLogger(classOf[NameOfClass])

附带说明一下,ScalaLogging提供了一种很好且简单的方法来使用具有类名的记录器,但没有像普通 java 那样的所有样板。你可以在你的类设置中正确地获得一个记录器,你所要做的就是扩展一个 trait Logging

class MyClass extends Logging {
  logger.debug("This is very convenient ;-)")
}
于 2013-04-02T14:21:47.043 回答
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)

    ...
}
于 2013-04-02T15:35:53.587 回答