2012-12-03 36 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