3

Java では、 と書きlogger.getLogger(NameOfClass.class)ます。Scalaで同じものを書く方法は?

4

2 に答える 2

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 がすべての利点を持っていないケースの 1 つ:

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 に答える