无法在logback中读取env变量

时间:2012-03-01 07:06:43

标签: logback

在变量替换期间,logback是否读取环境变量?我在应用启动期间在控制台上获得了REM_HOME_IS_UNDEFINED。但是变量存在。手册说env变量最后在食物链中查找。 http://logback.qos.ch/manual/configuration.html#variableSubstitution

这就是我正在做的事情:

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

1 个答案:

答案 0 :(得分: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);