log4j2.xml属性替换$ {}在WebLogic 12.2.1中不起作用

时间:2016-04-12 10:26:42

标签: java log4j2 weblogic12c

我在WebLogic 12.2.1上运行JAX-RS Web服务。 Web服务使用log4j2进行日志记录,到目前为止,它能够按照log4j2.xml中的指定登录到日志文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Properties>
        <Property name="log-path">E:/MLM/MLMDomain/servers/MLMAppSrv01/logs</Property>
    </Properties>
    <Appenders>
        <RollingFile name="RollingFile" fileName="${log-path}/MLMServices.log" filePattern="${log-path}/MLMServices-%d{yyyy-MM-dd}-%i.log" >
    ....

接下来,我没有硬编码托管服务器名称&#34; MLMAppSrv01&#34;,而是使用&#34; $ {weblogic.Name}&#34;将其更改为属性替换,如下所示:< / p>

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Properties>
        <Property name="log-path">E:/MLM/MLMDomain/servers/${weblogic.Name}/logs</Property>
    </Properties>
    <Appenders>
        <RollingFile name="RollingFile" fileName="${log-path}/MLMServices.log" filePattern="${log-path}/MLMServices-%d{yyyy-MM-dd}-%i.log" >
    ....

现在,log4j2不是用实际的WebLogic服务器名替换$ {weblogic.Name},而是将$ {weblogic.Name}视为实际的子文件夹名称,所以我最终在文件夹中创建了我的日志文件:

E:/MLM/MLMDomain/servers/${weblogic.Name}/logs

在Web服务代码中,当我使用System.getProperty(&#34; weblogic.Name&#34;)时,我能够获得运行应用程序的实际托管服务器,即&#34; MLMAppSrv01&#34 ;.所以它显示&#34; weblogic.Name&#34;确实是在JVM中定义的。

当我在独立程序中使用修改后的log4j2.xml文件时,传入-Dweblogic.Name = MLMAppSrv01,它工作正常,文件创建于:

E:/MLM/MLMDomain/servers/MLMAppSrv01/logs

log4j2.xml中的$ {}在WebLogic中不起作用的原因是什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果将变量指定为系统属性,则需要使用$ {sys:weblogic.Name},以便Log4j将使用SystemPropertiesLookup来解析变量。如果没有它,您将只能访问属性部分中声明的变量。