2011-11-07 17 views
5

Estoy tratando de reemplazar log4j en mi aplicación Grails con logback pero siempre estoy recibiendo unGrails: Reemplazar con log4j logback

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

cuando se ejecuta la aplicación plazo o prueba de la aplicación.

he incluido lo siguiente en BuildConfig.groovy por lo que pensé es suficiente:

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

no puedo encontrar más referencias a Log4J y no tienen idea de donde esta llamada viene de ?!

También estoy tratando de reemplazar Griales SLF 1.5.8 por 1.6.2 y obtener lo siguiente en la consola a pesar de haber excluido slf de todos los módulos de 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. 

Gracias de antemano por cualquier ayuda

Saludos

Jonas

Respuesta

3

Logback 0.9.21 y superiores depende de slf4j-API 1.6, que es lo que el error le está diciendo.

Añadir dependencias de org.slf4j: slf4j-api: 1.6

3

Esto funcionó para mí en BuildConfig.groovy al usar 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()) 

Esta última línea hace que Grails lea correctamente grails-app/conf/logback.groovy si desea establecer allí su configuración.

+0

Excluyendo 'griales-plugin-log4j' es clave – fglez

+0

' Logback.groovy' no va a funcionar cuando se ejecuta de la guerra, ya que se compila a logback. clase y Logback busca fuente – fglez

0

Utilicé logback 1.0.6. No funcionó. Pero uso otra forma. establecer la variable de entorno "logback.configurationFile = {groovy file address}". por ejemplo:

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

Puede utilizar este parámetro en tomcat o en cualquier otro archivo donde coloque su archivo war.

Funciona para mí.

0

Podría ser útil para los demás:

especifique la configuración de 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. Incluir el plugin logback y no incluyen los paquetes requieren:

en BuildConfig.groovy

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

dependencias dentro: incluyen compilar 'org.grails.plugins: logback: 0.3.1'

  1. Disable Tenedor ejecución de modo. No funcionará con logback.

  2. Las configuraciones anteriores SÓLO funcionarán con el modo WAR.

  3. Si incluso desea controlar el registro durante el modo de desarrollo local normal, incluya un archivo logback.xml en su directorio 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>