2012-12-03 35 views
1

我與Grails的2.1.1發展,現在我想的logback(http://logback.qos.ch)整合爲默認的日誌框架,它應該提供一些更好的日誌記錄功能也可以通過Groovy進行配置。的Grails 2.1.1 - 集成的logback

的logback爲1.0.7(最新的),並只與slf4j 1.6.6我想升級Grails的dependeny工作。 Grails 2.1.1使用的是slf4j 1.6.2。如何正確地做到這一點?

我試過如下:在BuildConfig.groovy我排除grails-plugin-log4jslf4j-api

grails.project.dependency.resolution = { 
    // inherit Grails' default dependencies 
    inherits("global") { 
     excludes "grails-plugin-log4j", "slf4j-api" 
    } 
    ... 
} 

,我嘗試在compilebuildruntime加載slf4j-api 1.6.6與其他必要的庫一起

grails.project.dependency.resolution = { 
    ... 
    dependencies { 
    // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg. 

    compile "org.slf4j:slf4j-api:1.6.6" 

    build "org.slf4j:slf4j-api:1.6.6", 
      "ch.qos.logback:logback-core:1.0.7", 
      "ch.qos.logback:logback-classic:1.0.7" 

    runtime "org.slf4j:slf4j-api:1.6.6", 
      "org.slf4j:log4j-over-slf4j:1.6.6", // logback dependency for classic module, as seen on http://logback.qos.ch/dependencies.html 
      "ch.qos.logback:logback-core:1.0.7", 
      "ch.qos.logback:logback-classic:1.0.7" 
} 
    ... 
} 

現在,如果我想要從Grails命令行中執行任何操作,可以是grails compilegrails clean,它可以是

| Loading Grails 2.1.1 
| Configuring classpath 
| Error Error executing script Compile: org/slf4j/LoggerFactory (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.) 
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156) 
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) 
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:272) 
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.<clinit>(PathMatchingResourcePatternResolver.java:169) 
| Error Error executing script Compile: org/slf4j/LoggerFactory 

我怎樣才能正確地升級底層slf4j-api:寧認爲,因爲它找不到的LoggerFactory類它不能執行該腳本?

如果我不排除slf4j-api第一,我與「舊」 1.6.2 API標記爲驅逐衝突調用grails dependency-report當...

另外,我很想有一個外部Logback的配置文件。我將如何實現它?在Log4j中,我只是在conf/spring/resources.groovy文件中聲明瞭log4jConfigurer bean - 如何使用Logback完成該操作?

先後在伐木的Grails 2.1.1的logback任何經驗,可以給我這個問題有什麼建議?

回答

1

因爲我覺得這個問題也將是事實,對其他開發商願意實施Grails中的的logback日誌框架,我會分享我對這個答案中的話題進步的事情 - 儘量不超載最初的問題與進展信息。

  1. 我仍然沒有運氣在更新中的Grails SLF4J,所以我堅持 與解決方案,簡單地超負荷SLF4J的API的依賴。 的Grails將顯示在grails dependency-report沒有錯誤,只是一個上了年紀的SLF4J依賴(1.6.2) 「驅逐通知」。這似乎 工作,但我會繼續尋找這個 主題更好的解決方案。

  2. 我通過 一個ServletContextListener現在我能負載的logback外部配置文件和ConfigLoader類 在grails-app/src/java實施,與web.xml文件中註冊的 ServletContextListener。 (以 得到web.xml只需在命令行 執行grails install-templates。您將在 grails-app/src/templates/war/web.xmlgrails-app/src/templates/war/web.xml中找到它)請務必使其成爲您的web.xml中的第一個 <listener/>條目,以便Logback獲得 儘快進行配置和加載。

    我發現此解決方案以及完整的代碼示例在 https://bowerstudios.com/node/896這是最好的和最短的 示例我發現這個主題似乎工作!

    這種解決方案只是加載外部配置文件和ConfigLoader類中使用 ,但並沒有將其設置爲整個 Grails應用程序。所以我搜索了一下,我發現了Logback的一個 解決方案,可以在GitHub上找到(https://github.com/qos-ch/logback-extensions),並且與 Spring Framework集成,所以我從這個類中取了這些類pageLogbackConfigurer類從here和調整他們適合 我的需要。

    現在一切就像一個魅力和我'能夠創造外部配置文件和 - 我最喜歡什麼 - 它鉤住在 與被注入到log對象如Controller默認類 。

希望這也是其他開發商也幫助;)

如果你有一個更好或更「時髦」的解決方案對於這一點,懇求讓我知道!

+1

使用logback grails插件怎麼樣? http://grails.org/plugin/logback – tbruyelle

+0

感謝您的建議 - 似乎Burt在10天前上傳了插件...所以,從我的問題日期可以看出,該插件一定是在發展或者在目前沒有想到。 插件本身看起來很有前途!我肯定會檢查出來的!此外,仍然存在IDE日誌對象缺少IDE轉換支持的問題......黑客利用Intellij IDEA插件來完成這個問題,但它似乎不是一個'漂亮'的解決方案...我也爲此提交了一個Bug報告:http://youtrack.jetbrains.com/issue/IDEA-97383 – herom

+0

apache和sl4j的日誌對象有什麼區別?我的意思是它們都暴露標準的日誌方法,如'info()','error()','debug()'。 – tbruyelle