2009-06-02 18 views
11

Mam następujące config log4j w moim Grails 1.1 appma wyjścia log4j w 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 
    } 
} 

Kiedy uruchomić testy jednostkowe, jedyne wyjście rejestrowania generowana jest z klas hibernacji. Nie rozumiem, dlaczego nie generuje się żadnych wyników rejestrowania dla moich własnych klas, tj. Tych w przestrzeni nazw com.mycompany. O dziwo, kiedy uruchamiam testy integracji, dane wyjściowe log4j są zgodne z oczekiwaniami.

Jeśli pójdę do testu dla testów jednostkowych, a następnie kliknąć na „System.out” link, widzę moje wiadomości dziennika w następującym formacie:

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

Zauważ, że nie jest to taki sam wzór, jaki określiłem w mojej konfiguracji log4j. Ponadto, jeśli mogę zmienić config log4j od:

debug 'com.mycompany' 

do:

fatal 'com.mycompany' 

wciąż widzę komunikaty dziennika na poziomie debugowania w sprawozdaniu z badań. Wygląda na to, że główny program rejestrujący jest nadpisywany podczas uruchamiania testów jednostkowych? Próbowałem klasy rejestrowania pod com.mycompany pomocą oddzielnego rejestratora, ale to nie wydaje się, aby jakakolwiek różnica

Dzięki, Don

Odpowiedz

17

Don,

Jeśli zajęcia, które starają się zalogować są to standardowe Grails klasy (domeny, kontroler, serwis, itp), powinieneś móc używać coś takiego:

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

jest nieco bardziej opis w podręczniku użytkownika Grails section on logging.

-1

Don,

Nie dość pęknięty zawiłości rejestrowanie DSL w wersji 1.1, ale może ci się to przydać: Dynamic Logging Plugin pozwala na włączanie/wyłączanie rejestrowania kanałów, gdy aplikacja jest uruchomiona, a także generuje konfigurację, którą możesz następnie umieścić w Conf.groovy.

Mam nadzieję, że to pomoże.

9

Ponieważ grails loguje się do log4j, można użyć -Dlog4j.debug i sprawdzić, jak skonfigurowano log4j (reference). Być może odebrano inny plik.


Istnieje co najmniej jeden critical bug fix do logowania, który skierowany jest do 1,2 ale nie na 1.1.x. Konfiguracja jest podobna do twojej. Być może wiadomości są błędnie rejestrowane w innym pliku?

0

trzeba wstrzyknąć rejestrator do kontrolera w badanej jednostki:

mockLogging(<controller class name>, true) 

Drugi argument mówi, aby logować komunikaty debugowania i poniżej.