【发布时间】:2014-12-27 05:24:26
【问题描述】:
在Java中我会写logger.getLogger(NameOfClass.class)。如何在 Scala 中编写相同的代码?
【问题讨论】:
-
为什么叫它二进制?
标签: scala
在Java中我会写logger.getLogger(NameOfClass.class)。如何在 Scala 中编写相同的代码?
【问题讨论】:
标签: scala
你可以试试:
logger.getLogger(getClass())
或:
logger.getLogger(classOf[NameOfClass])
附带说明,ScalaLogging 提供了一种简单易用的方法来使用具有类名的记录器,但没有像普通 java 那样的所有样板。你在你的类设置中得到了一个记录器,你所要做的就是扩展一个特征Logging:
class MyClass extends Logging {
logger.debug("This is very convenient ;-)")
}
【讨论】:
不要忘记在单例伴随对象上定义记录器:
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)
...
}
【讨论】:
new 上引入运行时开销(日志工厂)。