2009-06-02 12 views
11

Ho la seguente configurazione log4j nei miei Grails 1.1 appnessuna uscita log4j in Grails app

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

Quando eseguo unit test, l'unica uscita di registrazione generato è dalle classi Hibernate. Non capisco perché non venga generato alcun output di registrazione per le mie classi, ad esempio per quelli con lo spazio dei nomi com.mycompany. Stranamente, quando eseguo i test di integrazione, l'output log4j è come previsto.

Se vado al rapporto di prova per un test di unità, e fare clic sul link "System.out", vedo i miei messaggi di log nel seguente formato:

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

Si noti che questo non è il lo stesso schema che ho specificato nella mia configurazione di log4j. Inoltre, se cambio la configurazione log4j da:

debug 'com.mycompany' 

a:

fatal 'com.mycompany' 

vedo ancora registrare i messaggi a livello di debug nel verbale di prova. Sembra che il root logger venga sovrascritto durante l'esecuzione dei test unitari? Ho provato le classi di registrazione sotto com.mycompany utilizzando un registratore separato, ma questo non sembra fare alcuna differenza

Grazie, Don

risposta

17

Don,

Se le classi che si sta tentando di accedere sono sono classi Grails standard (dominio, controller, di servizio, ecc), si dovrebbe essere in grado di usare qualcosa come:

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

C'è un po 'più di descrizione in guida i Grails section on logging.

-1

Don,

non ho abbastanza incrinato la complessità del logging DSL in 1.1, ma questo potrebbe esserti utile: Dynamic Logging Plugin ti permette di attivare/disattivare i canali di logging mentre la tua app è attiva, e genera anche alcune configurazioni che puoi poi inserire in Conf.groovy.

Spero che questo aiuti.

9

Dal momento che la registrazione dei grappi delega a log4j, è possibile utilizzare -Dlog4j.debug e vedere come è configurato log4j (reference). Forse viene prelevato un altro file.


C'è almeno un critical bug fix per la registrazione, che è di 1,2 ma non a 1.1.x. La configurazione è simile alla tua. Forse i messaggi sono erroneamente registrati in un file diverso?

0

è necessario iniettare un logger per il controller in una prova di unità:

mockLogging(<controller class name>, true) 

Il secondo argomento dice di registrare i messaggi di debug e di seguito.

Problemi correlati