2011-11-07 12 views
5

che sto cercando di sostituire il log4j nel mio Grails app con logback ma sto ottenendo sempre unGrails: Sostituire log4j con logback

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

durante l'esecuzione run-app o prova-app.

ho incluso quanto segue in BuildConfig.groovy che ho pensato è sufficiente:

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' 
} 

non riesco a trovare nessuna più riferimenti a Log4J e non hanno alcuna idea di dove questa chiamata proviene da ?!

Sto anche cercando sostituire Grails SLF 1.5.8 da 1.6.2 e ottenere il seguente nella console pur avendo escluso SLF da tutti i moduli 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. 

Grazie in anticipo per qualsiasi aiuto

Saluti

Jonas

risposta

3

Logback 0.9.21 e soprattutto dipende slf4j-API 1.6 che è ciò che l'errore si sta dicendo.

Aggiungi dipendenze per org.slf4j: slf4j-api: 1.6

3

Questo ha funzionato per me in BuildConfig.groovy quando si utilizza 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()) 

Quest'ultima riga legge Grails correttamente grails-app/conf/logback.groovy se si desidera impostare la configurazione lì.

+0

Escludendo 'graal-plugin-log4j' è la chiave – fglez

+0

' Logback.groovy' non è andare a lavorare durante l'esecuzione dalla guerra, in quanto viene compilato a logback. class e Logback cercano la fonte – fglez

0

Ho utilizzato il logback 1.0.6. Non ha funzionato. Ma io uso un altro modo. imposta la variabile di ambiente "logback.configurationFile = {groovy file address}". ad esempio:

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

È possibile utilizzare questo parametro in tomcat o in qualsiasi altro in cui si inserisce il file di guerra.

Funziona per me.

0

Potrebbe essere utile per gli altri:

specificare la configurazione in 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. Includere il plugin logback ed escludono i pacchetti richiedono:

in BuildConfig.groovy

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

dipendenze interne: includono compilare 'org.grails.plugins: logback: 0.3.1'

  1. Disabilita Forcella esecuzione modalità. Non funzionerà con il logback.

  2. Le configurazioni sopra funzionano SOLO con la modalità WAR.

  3. Se si desidera controllare la registrazione anche durante la normale modalità di sviluppo locale, includere un file logback.xml nella directory conf.

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>