2011-06-20 8 views
2

これはかなり変わったようですが、grailsがwarファイルをビルドするとき、log4j.propertiesまたはlog4j.xmlファイルは生成されません。grails warを再ビルドせずにlog4jを設定しますか?

代わりに、WEB-INF/web.xmlに以下の

のweb.xmlがあります

 
<listener> 
    <listener-class>org.codehaus.groovy.grails.web.util.Log4jConfigListener</listener-class> 
</listener> 

を明らかにし、 "Log4jのDSLは、メモリ内のログを構成しますGrailsの"。ここでの問題は次のとおりです。 - log4jは自動的にJMXに公開されず、動的に変更され、grailsによって生成されたlog4jファイルはありません。しかし、Config.groovyはコンパイルされたファイルです。

戦争を再建することなくこれを管理する簡単な方法があるはずですか?その後、設定されたファイルへのDSL構成をシフト

 
beans = {
log4jConfigurer(org.springframework.beans.factory.config.MethodInvokingFactoryBean) { targetClass = "org.springframework.util.Log4jConfigurer" targetMethod = "initLogging" arguments = ["classpath:myapp/log4j.properties"] } }

resources.groovy:提案

1つのオプションは、春に通過し、そこにロギングを設定しています。

WARファイルを毎回再構築せずに、ロギング設定を動的に変更する方法については、誰でも助言できますか? grails-1.3.7を使用します。 DSLを切断することは正しい方法ではないようです。

おかげ

答えて

3

あなたは、起動時にアプリケーションによって検索された外部設定ファイルを有することができます。

実稼働環境のどこかにMyExternalConfig.groovyファイルがあります。たとえば、次のように

log4j = { 
    def catalinaBase = System.properties.getProperty('catalina.base')   
    if (!catalinaBase) catalinaBase = '.' 
    def logDirectory = "${catalinaBase}/logs" 
    appenders { 
      rollingFile name:"infoLog", maxFileSize:'900KB', file:"${logDirectory}/${appName}Info.log", maxBackupIndex:10, layout:pattern(conversionPattern: '%d{DATE} %p %c - %m%n'), threshold: org.apache.log4j.Level.INFO 
      rollingFile name:"erroLog", maxFileSize:'900KB', file:"${logDirectory}/${appName}Erro.log", maxBackupIndex:10, layout:pattern(conversionPattern: '%d{DATE} %p %c - %m%n'), threshold: org.apache.log4j.Level.ERROR 
    } 
    root { 
     info 'infoLog', 'erroLog' 
     additivity = false 
    } 
    error erroLog:"StackTrace" 
    error erroLog: 'org.codehaus.groovy.grails.web.servlet', // controllers 
     'org.codehaus.groovy.grails.web.pages', // GSP 
    'net.sf.ehcache.hibernate' 
    warn infoLog: 'org.mortbay.log' 
    info infoLog: "grails.app" 
} 

そして、confフォルダであなたのGrailsのプロジェクトに属しているあなたのConfig.groovyファイルで、ファイルの最後としてこれを置く:

def ENV_NAME = "MY_EXTERNAL_CONFIG" 
if(!grails.config.locations || !(grails.config.locations instanceof List)) { 
    grails.config.locations = [] 
} 
if(System.getenv(ENV_NAME)) { 
    grails.config.locations << "file:" + System.getenv(ENV_NAME) 
} else if(System.getProperty(ENV_NAME)) { 
    grails.config.locations << "file:" + System.getProperty(ENV_NAME) 
} else { 
    println "No external configuration file defined." 
} 

これは探しますConfig.groovyのgrails.config.locations属性に追加する外部設定ファイル。最初に、システム環境変数(この方法で使用します)を探します。見つからない場合は、コマンドラインパラメータを探します(Tomcatアプリケーションを起動するときに追加できます。 .sh)。

だけでTomcatを起動する前にこれを行う、お使いのシステム環境variabbleを設定するには:

MY_EXTERNAL_CONFIG="/home/tomcat/configs/MyExternalConfig.groovy" 
export MY_EXTERNAL_CONFIG 
--- start tomcat here --- 

それです。

+0

'MyExternalConfig.groovy'が変更された場合、この解決策は実行中のアプリケーションのログ設定を更新しますか?再起動を回避しようとしています。 –

関連する問題