log4j2.xml 桌面应用程序和 Tomcat Webapp 中的 sys 与 env
log4j2.xml sys vs env on Desktop application and in Tomcat Webapp
我有一个桌面应用程序和一个 tomcat Web 应用程序,它们使用 log4j2
写入日志文件。然后我还有 log4j2.xml
配置文件。它正在写入的文件保存在一个存储为 environment variable
的文件夹中。 log4j2.xml
文件看起来像这样,
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="logdir">${env:FOO}/log</Property>
<Property name="msgformat">%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0} [%t] %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${msgformat}"/>
</Console>
<RollingFile name="ERROR_FILE" fileName="${logdir}/error.log"
filePattern="${logdir}/error-%i.log">
<PatternLayout pattern="${msgformat}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="EVENT_FILE" fileName="${logdir}/event.log"
filePattern="${logdir}/event-%i.log">
<PatternLayout pattern="${msgformat}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="foo.utils.footest" level="trace"
additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="foo.foologger" level="trace"
additivity="false">
<AppenderRef ref="ERROR_FILE" level="WARN"/>
<AppenderRef ref="EVENT_FILE" level="TRACE"/>
</Logger>
<Logger name="foo" level="info"
additivity="false">
<AppenderRef ref="ERROR_FILE" level="WARN"/>
<AppenderRef ref="EVENT_FILE" level="TRACE"/>
</Logger>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
然而,当我尝试将 log4j2.xml
与 Tomcat webapp 一起使用时,它只是在 file-system
目录中创建了一个 ${env:FOO}
文件夹。但是,我将 env
替换为 sys
然后 webapp 写入日志文件但是现在当桌面应用程序尝试将 log4j2.xml
与 sys
一起使用时,它会生成 ${sys:FOO}
文件夹在 file-system
目录中。为什么会发生这种情况,当我将 sys
与桌面应用程序一起使用时,它找不到环境变量,但 webapp 可以,当我使用 env
时,webapp 找不到环境变量,但是桌面应用程序可以吗?我正在使用 log4j2
和 tomcat 7.0.57
以及 RHEL 6.6
你需要做的就是把你要用到的seten.sh
文件中的环境变量放到tomcatbin中。执行此操作后,当 tomcat 启动时,它将加载该环境变量,您将能够使用 log4j2.xml
文件中的 env
名称找到该变量。
我有一个桌面应用程序和一个 tomcat Web 应用程序,它们使用 log4j2
写入日志文件。然后我还有 log4j2.xml
配置文件。它正在写入的文件保存在一个存储为 environment variable
的文件夹中。 log4j2.xml
文件看起来像这样,
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="logdir">${env:FOO}/log</Property>
<Property name="msgformat">%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0} [%t] %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${msgformat}"/>
</Console>
<RollingFile name="ERROR_FILE" fileName="${logdir}/error.log"
filePattern="${logdir}/error-%i.log">
<PatternLayout pattern="${msgformat}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="EVENT_FILE" fileName="${logdir}/event.log"
filePattern="${logdir}/event-%i.log">
<PatternLayout pattern="${msgformat}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="foo.utils.footest" level="trace"
additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="foo.foologger" level="trace"
additivity="false">
<AppenderRef ref="ERROR_FILE" level="WARN"/>
<AppenderRef ref="EVENT_FILE" level="TRACE"/>
</Logger>
<Logger name="foo" level="info"
additivity="false">
<AppenderRef ref="ERROR_FILE" level="WARN"/>
<AppenderRef ref="EVENT_FILE" level="TRACE"/>
</Logger>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
然而,当我尝试将 log4j2.xml
与 Tomcat webapp 一起使用时,它只是在 file-system
目录中创建了一个 ${env:FOO}
文件夹。但是,我将 env
替换为 sys
然后 webapp 写入日志文件但是现在当桌面应用程序尝试将 log4j2.xml
与 sys
一起使用时,它会生成 ${sys:FOO}
文件夹在 file-system
目录中。为什么会发生这种情况,当我将 sys
与桌面应用程序一起使用时,它找不到环境变量,但 webapp 可以,当我使用 env
时,webapp 找不到环境变量,但是桌面应用程序可以吗?我正在使用 log4j2
和 tomcat 7.0.57
以及 RHEL 6.6
你需要做的就是把你要用到的seten.sh
文件中的环境变量放到tomcatbin中。执行此操作后,当 tomcat 启动时,它将加载该环境变量,您将能够使用 log4j2.xml
文件中的 env
名称找到该变量。