首页 > 解决方案 > log4j2 环境变量替换不适用于文件名属性

问题描述

我正在尝试使用包含服务器端口号的文件名配置我的每日滚动日志文件,因为这是一个多服务器应用程序,每个服务器都会生成它自己的日志。

我有以下配置

<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="[%d{ISO8601}:$${env:SERVER_PORT}-L1] [th:%t] [%c] [%level] [%logger{36}] - %n[%d{ISO8601}:$${env:SERVER_PORT}-L2]%msg%n"/>
        </Console>
        <RollingFile name="dailyLog" immediateFlush="false" append="true">
            <FileName>logs/rCOI.${env:SERVER_PORT:8090}.log</FileName>
            <FilePattern>logs/rCOI.${env:SERVER_PORT:8090}.%d{yyyy-MM-dd}.log.zip</FilePattern>
            <PatternLayout
                    pattern="[%d{ISO8601}:$${env:SERVER_PORT}-L1] [th:%t] [%c] [%level] [%logger{36}] - %n[%d{ISO8601}:$${env:SERVER_PORT}-L2]%msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy max="5" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="dailyLog"/>
        </Root>
    </Loggers>
</Configuration>

这会生成一个名为 logs/rCOI.${env:SERVER_PORT:8090}.log 的日志,因此它甚至没有使用默认值。我确信 SERVER_PORT 已定义并导出,因为我在应用程序中使用它没有问题。

我也试过 $${env:SERVER_PORT:8090} 和 ${SERVER_PORT} 。没有任何工作。

如果能够为 logs/ 目录使用环境变量,那就太好了。

标签: log4j2

解决方案


推荐阅读