2009-06-02 6 views
11

Tengo la siguiente configuración de log4j en mis Grails 1.1 aplicaciónninguna salida log4j en Grails aplicación

log4j = { 

    // Enable Hibernate SQL logging with param values 
    trace 'org.hibernate.type' 
    debug 'org.hibernate.SQL' 

    debug 'com.mycompany' 

    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n') 
     file name: 'hibeFile', file: 'hibe.log', layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n') 
    } 

    // By default, messages are logged at the error level to both the console and hibe.log 
    root { 
     error 'stdout', 'hibeFile' 
     additivity = true 
    } 
} 

Cuando ejecuto pruebas de unidad, la única salida de registro es generada a partir de las clases de Hibernate. No entiendo por qué no se genera ninguna salida de registro para mis propias clases, es decir, aquellas bajo el espacio de nombre com.mycompany. Extrañamente, cuando ejecuto pruebas de integración, el resultado de log4j es el esperado.

Si voy al informe de prueba para una prueba de unidad, y haga clic en el enlace "System.out", veo mis mensajes de registro en el siguiente formato:

DEBUG (member.InviteServiceTests): Calling getInvite with member (4517) 

Tenga en cuenta que este no es el mismo patrón que el que he especificado en mi configuración log4j. Por otra parte, si cambio de la configuración de log4j de:

debug 'com.mycompany' 

a:

fatal 'com.mycompany' 

sigo viendo Los mensajes de registro a nivel de depuración en el informe de la prueba. Parece que el registrador de raíz está siendo anulado cuando se ejecutan pruebas unitarias? He tratado de clases de registro bajo com.mycompany usando un registrador por separado, pero esto no parece hacer ninguna diferencia

Gracias, Don

Respuesta

17

Don,

Si las clases que usted está tratando de iniciar la sesión son clases son Grails estándar (dominio, controlador, servicios, etc.), debe ser capaz de usar algo como:

log4j = { 

    // Logging warnings and higher for all of the app 
    warn 'grails.app' 
    // Logging infos and higher for all controllers 
    info 'grails.app.controller' 
    // Logging debug and higher for the BarService 
    debug 'grails.app.service.BarService' 

    appenders { 
    // ...as above... 
    }  
    root { 
    // ...as above... 
    } 
} 

Hay un poco más en la descripción guía del usuario los griales section on logging.

-1

Don,

yo no he bastante agrietado las complejidades de iniciar sesión en DSL en 1.1, pero esto podría serle útil: El complemento de registro dinámico le permite activar/desactivar los canales de registro mientras su aplicación está activa y también genera algunas configuraciones que luego puede poner en Conf.groovy.

Espero que esto ayude.

9

Como grails el registro delega a log4j, puede usar -Dlog4j.debug y ver cómo se configura log4j (reference). Quizás otro archivo es recogido.


Hay al menos un critical bug fix para el registro que está dirigido a 1,2 pero no a 1.1.x. La configuración es similar a la tuya ¿Quizás los mensajes se registraron incorrectamente en un archivo diferente?

0

que necesita inyectarse en un registrador a su controlador en una unidad de prueba:

mockLogging(<controller class name>, true) 

El segundo argumento dice que registrar los mensajes de depuración y a continuación.

Cuestiones relacionadas