2012-03-01 10 views
1

変数置換時にlogbackが環境変数を読み込みますか?私はアプリケーションの起動時にコンソールでREM_HOME_IS_UNDEFINEDを取得しています。しかし変数は存在する。このマニュアルでは、env変数が食物連鎖の最後に検索されると述べています。ここでhttp://logback.qos.ch/manual/configuration.html#variableSubstitutionログバック内のenv変数を読み取ることができません

は私がやっているものです:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${REM_HOME}/reac/logs/reac.log</file> 

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>${REM_HOME}/reac/logs/archives/reac-%i.log.zip</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>3</maxIndex> 
    </rollingPolicy> 

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>5MB</maxFileSize> 
    </triggeringPolicy> 

    <encoder> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{36} %-5level - %msg%n</pattern> 
    </encoder>  
</appender> 

答えて

2

ここで私はやって終わったものだ:

私はENV変数を読み取り、システム変数として値を設定するためにはSystem.setPropertyを呼び出していますし、 loggercontextをリセットします。

System.setProperty(REM_HOME, remHome); 

     LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 

     try { 
      JoranConfigurator configurator = new JoranConfigurator(); 
      configurator.setContext(context); 

      // Call context.reset() to clear any previous configuration, e.g. default 
      // configuration. For multi-step configuration, omit calling context.reset() 
      context.reset(); 
      configurator.doConfigure(getClass().getClassLoader().getResourceAsStream(LOG_CONF_FILE)); 
     } 
     catch (JoranException je) { 
      // StatusPrinter will handle this 
      je.printStackTrace(); 
     } 
     StatusPrinter.printInCaseOfErrorsOrWarnings(context); 
0

明らかに、このエラーは、Javaプログラムは、この変数(REM_HOME)を理解can`tと言うので、次の2つのソリューションが新しいENV変数と呼ばれるREM_HOMEを追加したり、新しいプロパティファイルを作成し、使用するlogbackのcofigファイルを伝えてい

REM_HOME=Path_to_your_location 
:それは
<property file="path_to_your_File/YourFileName.properties"/> 

とあなたの特性で

はあなただけ怒鳴るように使用したいvriableを定義ファイル(あなたのコードに次の行を追加します)
関連する問題