【问题标题】:Grails: Replace log4j with logbackGrails:用 logback 替换 log4j
【发布时间】:2011-12-23 09:52:53
【问题描述】:

我正在尝试用 logback 替换我的 Grails 应用程序中的 log4j,但总是得到一个

Embedded error: java.lang.reflect.InvocationTargetException
org.apache.log4j.LogManager

在运行 run-apptest-app 时。

我在 BuildConfig.groovy 中包含了以下内容,我认为这已经足够了:

inherits("global") {
    excludes "slf4j-log4j12"
}

[...]

dependencies {
    build 'ch.qos.logback:logback-core:0.9.29', 'ch.qos.logback:logback-classic:0.9.29'
    runtime 'ch.qos.logback:logback-core:0.9.29', 'ch.qos.logback:logback-classic:0.9.29'
}

我找不到更多对 Log4J 的引用,也不知道这个调用来自哪里?!

我也在尝试将 Grails slf 1.5.8 替换为 1.6.2 并在控制台中获得以下内容,尽管已从所有 Grails 模块中排除了 slf:

SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.

提前感谢您的帮助

问候,

乔纳斯

【问题讨论】:

    标签: grails logging log4j slf4j


    【解决方案1】:

    Logback 0.9.21 及更高版本取决于 slf4j-api 1.6,这就是该错误告诉您的内容。

    为 org.slf4j:slf4j-api:1.6 添加依赖项

    【讨论】:

      【解决方案2】:

      当我使用 Grails 2.1.0 时,这在 BuildConfig.groovy 中对我有用:

      inherits("global") {
          excludes 'grails-plugin-log4j'        
      }
      

      [...]

      dependencies {       
          compile 'ch.qos.logback:logback-classic:1.0.6'
          runtime 'ch.qos.logback:logback-classic:1.0.6'
      }
      

      [...]

      this.classLoader.rootLoader.addURL(new File("${basedir}/grails-app/conf/").toURI().toURL())
      

      如果您想在此处设置配置,最后一行会使 Grails 正确读取 grails-app/conf/logback.groovy

      【讨论】:

      • 排除grails-plugin-log4j是关键
      • Logback.groovy 从 WAR 运行时不起作用,因为它被编译为 Logback.class 并且 Logback 寻找源
      【解决方案3】:

      我使用了 logback 1.0.6。它没有用。但我用另一种方式。设置环境变量“logback.configurationFile={groovy 文件地址}”。例如:

      grails run-app -Dlogback.configurationFile=c:\log\logback.groovy
      

      您可以在 tomcat 或您将 war 文件放入其中的任何其他参数中使用此参数。

      它对我有用。

      【讨论】:

        【解决方案4】:

        几天前我将 Logback 集成到 Grails - 我的工作解决方案步骤如下:Grails 2.1.1 - Logback integration

        此外,还有一个新的插件'围绕街区:http://grails.org/plugin/logback 这似乎很有希望!

        祝你在这个问题上好运 - 值得努力!

        【讨论】:

          【解决方案5】:

          这可能对其他人有帮助:

          在 Config.groovy 中指定配置

          logback = {
              appenders {
                  console name: 'stdout', encoder: pattern(pattern: "%d{dd-MMM-yyyy HH:mm:ss} %-5p %c - %m%n")
          
                  rollingFile(
                          name: 'fileAppender',
                          file: logFileName,
                          encoder: pattern(pattern: "%d{dd-MMM-yyyy HH:mm:ss} %-5p %c - %m%n"),
                          triggeringPolicy: new SizeBasedTriggeringPolicy(maxFileSize: 10*1024*1024), // Max is 10 MB log files
                          rollingPolicy: new FixedWindowRollingPolicy(fileNamePattern: iLogFileName)
                  )
              }
          
              error fileAppender: 'org.codehaus.groovy.grails.web.servlet',        // controllers
                      'org.codehaus.groovy.grails.web.pages',          // GSP
                      'org.codehaus.groovy.grails.web.sitemesh',       // layouts
                      'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
                      'org.codehaus.groovy.grails.web.mapping',        // URL mapping
                      'org.codehaus.groovy.grails.commons',            // core / classloading
                      'org.codehaus.groovy.grails.plugins',            // plugins
                      'org.codehaus.groovy.grails.orm.hibernate',      // hibernate integration
                      'org.springframework',
                      'org.hibernate',
                      'net.sf.ehcache.hibernate'
          
              info fileAppender: 'org.springframework.web.client',
                      'com.yourpackage',
                      'com.linkedin.grails'
          
          
              debug fileAppender: 'com.yourpackage',  // Set debug level for non-grails artifacts, e.g. src/groovy, under the com.yourpackage.package
                      'grails.app' // Set debug level for all application artifacts
          
              trace fileAppender: 'org.springframework.web.client',
                      'org.springframework.social',
                      'com.yourpackage'
          
              root {
                  info 'stdout', 'fileAppender'
              }
          }
          
          1. 包含 logback 插件并排除所需包:

          在 BuildConfig.groovy 中

           inherits("global") {
                  excludes 'grails-plugin-log4j', 'log4j'  //using logback as grails-log4j have serialization issues with spark libraries
              }
          

          内部依赖:包括 compile 'org.grails.plugins:logback:0.3.1'

          1. 禁用分叉模式执行。它不适用于 logback。

          2. 以上配置仅适用于WAR模式。

          3. 如果您甚至想在正常的本地开发模式下控制日志记录,请在您的 conf 目录中包含一个 logback.xml 文件。

          logback.xml:

          <?xml version="1.0" encoding="UTF-8" ?>
          
          <configuration>
              <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                  <encoder>
                      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                  </encoder>
              </appender>
          
              <root level="warn">
                  <appender-ref ref="STDOUT"/>
              </root>
              <shutdownHook/>
          </configuration>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-30
            • 1970-01-01
            • 1970-01-01
            • 2012-04-10
            • 2018-11-05
            • 1970-01-01
            • 2013-08-30
            • 2022-01-16
            相关资源
            最近更新 更多