2010-02-14 59 views
5

我的log4j DSL在我的Config.groovy中正確配置了grails應用程序。使用grails run-app運行應用程序會按照我在DSL中指定的方式轉儲完美的日誌記錄。然而,在做了一場Grails戰爭來生成戰爭文件並將其部署到tomcat之後,日誌記錄就消失了。除了tomcat控制檯在調試級別顯示數百萬條日誌語句以及沒有特定於我登錄到日誌文件的內容外,我無法在任何地方看到它的工作原理。Tomcat上的Grails WAR「Log4J」根本沒有工作


log4j = { 
     appenders { 
       appender new org.apache.log4j.DailyRollingFileAppender(name: "tomcatLog", datePattern: "'.'yyyy-MM-dd", file: "${logDirectory}/snm.log".toString(), layout: pattern(conversionPattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] %p %c{5} %m%n')) 
     } 
     root { 
      info 'stdout', 'tomcatLog' 
      additivity = true 
     } 
     info 'grails.app', 
       'grails.app.controller', 
       'grails.app.bootstrap', 
       'grails.app.service', 
       'grails.app.task', 
       'commons', 
       'jsontwitter' 
    } 

能否請你解釋一下上面的DSL?它發送commons。*和jsontwitter。*類日誌到指定的日誌文件,但沒有控制器,服務日誌保存在文件中。

感謝, 阿拉姆謝爾

回答

7

你需要找出什麼日誌目錄Tomcat使用。這是通過在grails-app/conf目錄/ Config.groovy中的下面的代碼片段完成:

def catalinaBase = System.properties.getProperty('catalina.base') 
if (!catalinaBase) catalinaBase = '.' // just in case 
def logDirectory = "${catalinaBase}/logs" 

// default for all environments 
log4j = { root -> 
    appenders { 
      rollingFile name:'stdout', file:"${logDirectory}/${appName}.log".toString(), maxFileSize:'100KB' 
      rollingFile name:'stacktrace', file:"${logDirectory}/${appName}_stack.log".toString(), maxFileSize:'100KB' 
    } 

    error 'org.codehaus.groovy.grails.web.servlet', // controllers 
      'org.codehaus.groovy.grails.web.pages', // GSP 
      'org.codehaus.groovy.grails.web.sitemesh', // layouts 
      'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping 
      'org.codehaus.groovy.grails.web.mapping', // URL mapping 
      'org.codehaus.groovy.grails.commons', // core/classloading 
      'org.codehaus.groovy.grails.plugins', // plugins 
      'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration 
      'org.springframework', 
      'org.hibernate' 
    root.level = org.apache.log4j.Level.WARN 
} 

// special settings with production env 
environments { 
    development { 
     log4j = { root -> 
      appenders { 
         console name: 'stdout', layout: pattern(conversionPattern: "%d [%t] %-5p %c %x - %m%n") 
      } 
      warn  'org.codehaus.groovy.grails.web.servlet', // controllers 
         'org.codehaus.groovy.grails.web.pages', // GSP 
         'org.codehaus.groovy.grails.web.sitemesh', // layouts 
         'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping 
         'org.codehaus.groovy.grails.web.mapping', // URL mapping 
         'org.codehaus.groovy.grails.commons', // core/classloading 
         'org.codehaus.groovy.grails.plugins', // plugins 
         'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration 
         'org.springframework', 
         'org.hibernate' 
      debug 'com.netjay' 
      root.level = org.apache.log4j.Level.INFO 
     } 
    } 
} 
+0

這確實記錄了我DEPS應用喪生。但是,當我更新了這個問題時,你能否看看我爲我的日誌記錄指定的DSL,並告訴我這有什麼問題,因爲除了服務器,服務器,域,控制器的日誌都沒有被指定爲appender包例如commons和jsontwitter。 同樣在catalina.out中,所有內容都被追加了,但是還有大量的DEBUG級別日誌記錄:( 因此,這對我來說非常混亂 –

+0

我認爲DSL中的包裝定義是錯誤的,需要刪除前綴「grails.app」,所以如果你的域類位於com.mycompany.abc.MyCoolDomainClass包中,你必須在DSL中使用com.mycompany.abc如果你還沒有在你的域類中使用包,那麼controllerer,建議始終使用軟件包,並且不要在根軟件包中放入任何東西。 –