没有“log.xxxx”的Scala调用日志记录方法

时间:2013-02-16 01:09:13

标签: scala logging methods

有没有办法在不必手动定义日志记录方法的情况下执行以下操作,例如def error

object FooBar {
  lazy val log = LoggerFactory.getLogger("AndroidProxy")
  def error(msg: String) = log.error(msg)


  def my_method(): Unit = {
    error("This is an error!")
  }
}

2 个答案:

答案 0 :(得分:5)

替换def error
import log.error

答案 1 :(得分:1)

如果您想要登录许多类而不是每次都重写日志记录方法,您可以创建一个特征

trait Logging {
    lazy val logger = LoggerFactory.getLogger(getClass())

    def error(msg: => String) = log.error(msg)
}

然后在你需要记录的课程中你做...

class MyClass extend Logging {
    def method() {
        //do stuff
        error("oups!")
    }
}

通过名称传递msg参数(使用:=> String)通常是个好主意,这样只有在使用时才会计算字符串参数。

另外,请注意getClass现在是记录器的名称。这很有用,因为现在记录器的名称是扩展Logging特征的类的名称,而不是硬编码的名称。