2010-03-09 48 views
10

我對Grails的1.2我log4j的DSL配置如下:爲什麼Grails(在Tomcat中)記錄到catalina.out和我的自定義文件appender?

log4j = { 
    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: conversionPattern) 

     environments { 
      production { 
       // ... some code to determine file path ... 

       rollingFile name: 'file', file: "${logDirectory}/${appName}.log", layout: pattern(conversionPattern: conversionPattern) 
       rollingFile name: 'StackTrace', file: "${logDirectory}/${appName}-stacktrace.log" 
     } 
    } 

    environments { 
     development { root { warn 'stdout' } } 
     test { root { warn 'stdout' } } 
     production { root { error 'file' } } 
    } 

    // ... package-specific logging configurations ... 
} 

當我部署爲戰爭到Tomcat,我的日誌被寫入到兩個catalina.out中和生產定義我的「文件」記錄。

我已經試過:

  • 添加additivity = falseroot {}定義production {},不工作(我不會真的指望它,因爲它顯然是設置加根記錄器本身?)。
  • appenders {}閉包中的development {}test {}塊內定義了「標準輸出」控制檯appender,但這也不起作用。

也許這是我的Tomcat配置問題,而不是我的log4j DSL?我最近找到一個類似問題的人是this mailing-list thread,對此沒有(簡單)解決方案。

如何防止將日誌寫入生產中的catalina.out?

回答

3

我能夠做的Config.groovy下面來解決這個問題:

import org.apache.log4j.Logger 

log4j = { 
    // ... configuration from question ... 
} 

environments { 
    production { 
     def logger = Logger.getRootLogger() 
     logger.removeAppender('stdout') 
    } 
} 

但是,這感覺就像一個骯髒的黑客,而我希望有一個更好的是,Grails log4j的DSL專用這樣做的方法。

另外,任何應用程序可能發生的寫入標準輸出都可能不會寫入,如果有日誌/異常/堆棧跟蹤以某種方式直接寫入標準輸出,這可能是一件壞事。

相關問題