2017-01-10 67 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