gpt4 book ai didi

Grails 2.1.1 - Logback 集成

转载 作者:行者123 更新时间:2023-12-02 14:45:09 24 4
gpt4 key购买 nike

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

由于 Logback 1.0.7(最新)仅适用于 slf4j 1.6.6我想升级 Grails 依赖项。 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"
}
...
}

我尝试加载 slf4j-api 1.6.6compile buildruntime连同其他必要的库
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 ,它提示它无法执行脚本,因为它找不到 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

如何升级底层 slf4j-api适本地?

如果我不排除 slf4j-api首先,我在调用 grails dependency-report 时与标记为驱逐的“旧”1.6.2 api 发生冲突...

另外,我希望有一个用于 Logback 的外部配置文件。我将如何实现它?使用 Log4j,我刚刚声明了 log4jConfigurer bean 内 conf/spring/resources.groovy文件 - 如何使用 Logback 完成?

有没有人用 Logback 记录 Grails 2.1.1 的经验,可以给我任何关于这个问题的建议吗?

最佳答案

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

  • 我仍然没有更新 slf4j 在 Grails 中,所以我卡住了
    使用简单地重载 slf4j-api 依赖项的解决方案。
    Grails 在 grails dependency-report 上不会显示错误, 只是一个
    关于旧 slf4j 依赖项(1.6.2)的“驱逐通知”。这似乎
    工作,但我会继续寻找更好的解决方案
    话题。
  • 我现在可以 为 Logback 加载外部配置文件通过
    一个 ServletContextListenerConfigLoader类(class)
    grails-app/src/java 中实现, 与ServletContextListenerweb.xml 内注册文件。 (到
    获取 web.xml只需执行grails install-templates
    命令行。你会在下面找到它grails-app/src/templates/war/web.xml ) 一定要把它放在第一位<listener/>在您的 web.xml 中输入以便 Logback 得到
    尽快配置和加载。

    我找到了这个解决方案以及完整的代码示例
    https://bowerstudios.com/node/896这是最好和最短的
    我在这个主题上找到的例子似乎有效!

    该解决方案只是加载了外部配置文件并使用
    它在ConfigLoader类(class),但没有为整个类(class)设置
    Grails 应用程序。所以我用谷歌搜索了更多,我发现了一个
    来自 Logback 的解决方案,可在 GitHub (https://github.com/qos-ch/logback-extensions) 上获取,并与Spring Framework ,所以我从这个 page 中学习了这些类(class)和LogbackConfigurer来自 here 的类(class)并调整它们以适应
    我的需要。

    现在一切都像一个魅力,我能够创建一个外部配置文件 - 我最喜欢的 - 它正在 Hook
    log注入(inject)到例如的对象Controller类(class)
    默认情况下。

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

    如果您对此有更好或更“常规”的解决方案,请告诉我!

    关于Grails 2.1.1 - Logback 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685084/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com