【问题标题】:Use environment variable defined in web.xml in config files在配置文件中使用 web.xml 中定义的环境变量
【发布时间】:2016-02-18 04:05:50
【问题描述】:

我在 web.xml 中的 war 包中定义了一个变量,例如:

<env-entry>
        <env-entry-name>LOG_DIR</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>${CATALINA_HOME}</env-entry-value>
</env-entry>

我在类路径中有 logback.xml 文件。 我想在那里使用这个变量:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/logs/WebStore.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>

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

当我启动我的 tomcat 实例时,我会在 tomcat bin 目录中获得 LOG_DIR_IS_UNDEFINED 文件夹。

我知道我可以创建一个属性文件并将其导入 logback.xml,但我不想再创建一个文件,我对以这种方式使用变量感兴趣。有可能吗?

【问题讨论】:

标签: java web jakarta-ee tomcat


【解决方案1】:

环境条目可以在配置文件中可见,但通常程序员必须专门设置环境范围。例如 $${env:USER} 类似的东西可以在 Log4j 中使用。 见这里:http://logging.apache.org/log4j/2.x/manual/lookups.html

另请参阅此答案: How to use system environment variables in log4j.properties?

logback 中可能存在类似的机制,但是我无法通过快速搜索找到一些东西。 如果每个人都找到了,非常欢迎您编辑此答案并添加它。 在特定情况下,您可以直接在logback.xml 中使用${CATALINA_HOME}

【讨论】:

  • 基本上我想知道生命周期,当 logback.xml 加载时,来自 web.xml 的环境条目是否已应用到上下文并且可见?
  • 我希望是的,因为应用程序服务器会在加载引用 logback 的 servlet 之前首先考虑 web.xml。也许有一种方法可以改变这一点(也可能取决于服务器),但应该不太可能。
猜你喜欢
  • 2019-01-25
  • 2010-11-27
  • 2020-12-04
  • 2021-07-07
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2022-12-21
  • 2022-08-09
相关资源
最近更新 更多