Grails: заменить log4j на logback - PullRequest
       27

Grails: заменить log4j на logback

5 голосов
/ 07 ноября 2011

Я пытаюсь заменить log4j в приложении Grails на 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 и понятия не имею, откуда этот вызов?!

Я также пытаюсь заменить Grails slf 1.5.8 на 1.6.2 и получить в консоли следующее, несмотря на исключение slf из всех модулей Grails:

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.

Заранее спасибо за любую помощь

С уважением,

Jonas

Ответы [ 5 ]

3 голосов
/ 21 июля 2012

Это сработало для меня в BuildConfig.groovy при использовании Grails 2.1.0:

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 , если вы хотите установить свою конфигурацию там.

3 голосов
/ 07 ноября 2011

Logback 0.9.21 и выше зависит от slf4j-api 1.6, о котором говорит эта ошибка.

Добавить зависимости для org.slf4j: slf4j-api: 1.6

0 голосов
/ 04 марта 2016

Это может быть полезно для других:

указать конфиг в 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: 101024), // 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
    }

внутри зависимостей: include compile 'org.grails.plugins: logback: 0.3.1'

  1. Отключить выполнение режима Fork. Это не будет работать с logback.

  2. Вышеуказанные конфигурации будут работать ТОЛЬКО с режимом WAR.

  3. Если вы даже хотите контролировать ведение журнала в обычном режиме локальной разработки, включите файл logback.xml в каталог conf. *1024*

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>
0 голосов
/ 02 января 2013

Я интегрировал Logback в Grails несколько дней назад - мои шаги к рабочему решению здесь: Grails 2.1.1 - Интеграция Logback

Кроме того, вокруг блока есть только новый плагин: http://grails.org/plugin/logback, который выглядит многообещающим!

Удачи в этом вопросе - оно того стоит!

0 голосов
/ 02 января 2013

Я использовал logback 1.0.6.Это не сработало.Но я использую другой способ.установить переменную окружения "logback.configurationFile = {groovy file address}".например:

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

Вы можете использовать этот параметр в Tomcat или любых других, в которые вы положили свой военный файл.

Он работает для меня.

...