Grails:用logback替换log4j

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grails:用logback替换log4j相关的知识,希望对你有一定的参考价值。

我试图用我的Grails应用程序替换log4j并使用logback,但我总是得到一个

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

在运行run-app或test-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的引用,也不知道这个调用来自哪里?!

我也尝试用1.6.2替换Grails slf 1.5.8并在控制台中获得以下内容尽管已从所有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.

在此先感谢您的帮助

问候,

乔纳斯

答案

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

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

另一答案

使用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。

另一答案

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

grails run-app -Dlogback.configurationFile=c:loglogback.groovy

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

这个对我有用。

另一答案

几天前我将Logback集成到Grails中 - 我的工作解决方案的步骤在这里:Grails 2.1.1 - Logback integration

此外,只有一个新的Plugin'围绕块:http://grails.org/plugin/logback看起来很有希望!

祝这个问题好运 - 值得付出努力!

另一答案

它可能对其他人有帮助:

在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. 包括logb​​ack插件和Exclude require包:

在BuildConfig.groovy中

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

内部依赖项:include compile'org.grails.plugins:logback:0.3.1'

  1. 禁用Fork模式执行。它不适用于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>

以上是关于Grails:用logback替换log4j的主要内容,如果未能解决你的问题,请参考以下文章

将spark默认日志log4j替换为logback

log4j2替换log4j需要修改哪些地方

把日志从log4j转换成logback的经历

log4j升级到logback

简单了解 SLF4J LOG4J Logback logging 日志框架

slf4j与log4j是什麽关系?