2017-01-10 58 views
0

我有以下的Scala类(MyApp.scala)内部的SLF4J记录器:声明从Scala的司机

package me.myapp 

import org.slf4j.Logger 
import org.slf4j.LoggerFactory 

object MyApp { 
    val logger = LoggerFactory.getLogger(classOf[MyApp]) 

    def main(args : Array[String]) : Unit = { 
    logger.info("Well hello SLF4J!") 
    } 
} 

当我运行此我得到一个编译错误:

/Users/myuser/workspace/myapp/src/main/scala/me/myapp/MyApp.scala:7: not found: type MyApp 
    val logger = LoggerFactory.getLogger(classOf[MyApp]) 
              ^
one error found 

所以我需要MyAppobject(而不是class),这样我可以有一个静态的main方法(对于我的可执行JAR),但似乎因为MyAppobject,所以classOf[MyApp]实际上并没有解决任何问题。

所以一些相关的担忧:

  1. 为什么objects不是类?如果他们不是班级,那么我可以放弃将main方法放在里面吗?和
  2. 我怎样才能得到一个SLF4J记录器MyApp

回答

1
  1. 对象有的确是一个类,但我不认为它的命名对象名称。

  2. 只需使用LoggerFactory.getLogger(的getClass)

+0

感谢@ C4stor(+1),但是当我用'LoggerFactory.getLogger(的getClass)'它产生的日志信息,如:'[主] INFO我.myapp.MyApp $ - 好的你好SLF4J!'。请注意,在课程名称末尾有流氓美元符号(“'$”)?任何方式摆脱它?再次感谢! – smeeb

+1

你可以使用LoggerFactory.getLogger(“你想要的任何字符串”)来自定义显示名称 – C4stor

+0

我猜测美元符号被添加到那里,因为Scala可能把对象当作内部/私有类来处理? – smeeb