我在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中不起作用的原因是什么?
提前致谢。
答案 0 :(得分:1)
如果将变量指定为系统属性,则需要使用$ {sys:weblogic.Name},以便Log4j将使用SystemPropertiesLookup来解析变量。如果没有它,您将只能访问属性部分中声明的变量。