2009-06-02 57 views
11

沒有log4j的輸出I具有以下log4j的配置在我的Grails 1.1應用Grails中應用

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

當運行單元測試,所產生的唯一的日誌輸出是從Hibernate類。我不明白爲什麼沒有爲我自己的類生成日誌輸出,即那些在com.mycompany命名空間下的輸出。奇怪的是,當我運行集成測試時,log4j輸出如預期的那樣。

如果我去測試報告的單元測試,並點擊「的System.out」鏈接,我看到下面的格式我的日誌消息:

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

請注意,這不是與我在log4j配置中指定的模式相同。此外,如果我從改變log4j的配置:

debug 'com.mycompany' 

到:

fatal 'com.mycompany' 

我仍然看到在測試報告中的調試級別的日誌信息。看起來好像根記錄器在運行單元測試時被覆蓋了?我使用一個單獨的記錄com.mycompany下試過日誌類,但是這似乎並沒有什麼差別

謝謝, 唐

回答

17

唐,

如果您嘗試登錄的類是標準的Grails類(域控制器,服務等),你應該能夠使用類似:

​​

有一個在Grails的用戶指南稍微描述section on logging.

-1

唐,

我還沒有完全破解的複雜性在1.1中記錄DSL,但這可能對您有用:動態日誌記錄插件允許您在應用程序啓動時打開/關閉日誌記錄通道,並生成一些配置文件,然後將其放入Conf.groovy。

希望這會有所幫助。

9

由於grails日誌記錄委託給log4j,因此可以使用-Dlog4j.debug並查看log4j如何配置(reference)。也許另一個文件被拾起。


至少有一個critical bug fix用於日誌記錄,目標是1.2而不是1.1.x.配置與您的配置類似。也許這些消息被錯誤地記錄在不同的文件中?

0

你需要在單元測試中注入記錄到您的控制器:

mockLogging(<controller class name>, true) 

第二個參數表示記錄調試消息和以下。