Grails2.1.1-回写集成

Grails2.1.1-回写集成,grails,logback,Grails,Logback,我正在使用Grails2.1.1进行开发,现在我想集成Logback(http://logback.qos.ch)作为默认的日志框架,它应该提供一些更好的日志功能,也可以通过Groovy进行配置 由于Logback 1.0.7(最新版本)仅适用于slf4j 1.6.6,因此我想升级Grails依赖项。Grails2.1.1正在使用slf4j 1.6.2。如何正确地做到这一点 我尝试了以下方法:在BuildConfig.groovyI排除grails-plugin-log4j和slf4j-api

我正在使用Grails2.1.1进行开发,现在我想集成Logback(http://logback.qos.ch)作为默认的日志框架,它应该提供一些更好的日志功能,也可以通过Groovy进行配置

由于Logback 1.0.7(最新版本)仅适用于
slf4j 1.6.6
,因此我想升级Grails依赖项。Grails2.1.1正在使用
slf4j 1.6.2
。如何正确地做到这一点

我尝试了以下方法:在
BuildConfig.groovy
I排除
grails-plugin-log4j
slf4j-api

grails.project.dependency.resolution = {
  // inherit Grails' default dependencies
  inherits("global") {
      excludes "grails-plugin-log4j", "slf4j-api"
  }
  ...
}
我尝试将
slf4japi 1.6.6
加载到
compile
build
runtime
以及其他必要的库中

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 compile
还是
Grails clean
,它都会抱怨无法执行脚本,因为它找不到LoggerFactory类:

| 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
|加载Grails 2.1.1
|配置类路径
|执行脚本编译时出错:org/slf4j/LoggerFactory(注意:堆栈跟踪已被筛选。请使用--verbose查看整个跟踪。)
java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory
位于org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
位于org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
位于org.apache.commons.logging.LogFactory.getLog(LogFactory.java:272)
位于org.springframework.core.io.support.PathMatchingResourcePatternResolver。(PathMatchingResourcePatternResolver.java:169)
|执行脚本编译时出错:org/slf4j/LoggerFactory
如何正确升级基础的
slf4j api

如果我不首先排除
slf4j api
,那么在调用
grails依赖关系报告时,我会与标记为收回的“旧”1.6.2 api发生冲突

另外,我希望有一个用于Logback的外部配置文件。我将如何实施它?对于Log4j,我刚刚在
conf/spring/resources.groovy
文件中声明了一个
log4jConfigurer
bean——如何使用Logback


是否有人有使用Logback记录Grails 2.1.1的经验,并能就此问题给我一些建议?

因为我认为这个问题对于其他愿意使用Grails实现Logback日志框架的开发人员来说也是事实,我将在这个答案中分享我在这个主题上的进展——尽量不要用进展信息来重载最初的问题

  • 我仍然没有幸在Grails中更新slf4j,所以我坚持 通过简单重载slf4j api依赖项的解决方案。 Grails在
    Grails依赖项报告上不会显示错误,只是一个
    旧slf4j依赖项上的“驱逐通知”(1.6.2)。这似乎
    但我会继续寻找更好的解决方案
    话题

  • 现在,我可以通过加载一个外部配置文件来进行Logback
    ServletContextListener
    ConfigLoader
    类 在
    grails-app/src/java
    中实现,带有
    ServletContextListener
    web.xml
    文件中注册。(至) 获取
    web.xml
    只需在 命令行。你可以在下面找到它
    grails-app/src/templates/war/web.xml
    )确保它是第一个
    在您的
    web.xml
    中输入日志,以便 尽快配置并加载

    我在上找到了这个解决方案以及完整的代码示例 哪一个是最好的和最短的 我在这个主题上找到的例子似乎很有效

    此解决方案仅加载外部配置文件并使用 它位于
    ConfigLoader
    类中,但没有为整个类设置它 Grails应用程序。所以我在谷歌上搜索了一下,找到了一个 来自Logback的解决方案,可从GitHub获得(https://github.com/qos-ch/logback-extensions)并与
    Spring框架
    ,所以我从这个 来自的
    LogbackConfigurer
    类,并调整它们以适合 我的需要

    现在一切都像一个魔咒一样工作,我能够创建一个外部配置文件,而且——我最喜欢的是——它正在连接 使用注入到例如
    控制器
    类的
    日志
    对象 默认情况下

  • 希望这对其他开发人员也有帮助;)


    如果您有更好或更“优秀”的解决方案,请告诉我

    因为我认为这个问题对于其他愿意用Grails实现Logback日志框架的开发人员来说也是事实,所以我将在这个答案中分享我在这个主题上的进展——尽量不要让初始问题的进度信息过多

  • 我仍然没有幸在Grails中更新slf4j,所以我坚持 通过简单重载slf4j api依赖项的解决方案。 Grails在
    Grails依赖项报告上不会显示错误,只是一个
    旧slf4j依赖项上的“驱逐通知”(1.6.2)。这似乎
    但我会继续寻找更好的解决方案
    话题

  • 现在,我可以通过加载一个外部配置文件来进行Logback
    ServletContextListener
    ConfigLoader
    类 在
    grails-app/src/java
    中实现,带有
    ServletContextListener
    web.xml
    文件中注册。(至) 获取
    web.xml
    只需在 命令行。你可以在下面找到它
    grails-app/src/templates/war/web.xml
    )确保它是第一个
    在您的
    web.xml
    中输入日志,以便 尽快配置并加载

    我在上找到了这个解决方案以及完整的代码示例 哪一个是最好的和最好的