log4j2.xml 属性 替换 ${ } 在 WebLogic 12.2.1 中不起作用
log4j2.xml property substitution ${ } not working in WebLogic 12.2.1
我在 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" >
....
接下来,我没有对托管服务器名称 "MLMAppSrv01" 进行硬编码,而是使用“${weblogic.Name}”将其更改为 属性 替换,如下所示:
<?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.Name} 替换为实际的 WebLogic 服务器名称,而是简单地将 ${weblogic.Name} 视为实际的子文件夹名称,所以我最终得到了我的在文件夹中创建的日志文件:
E:/MLM/MLMDomain/servers/${weblogic.Name}/logs
在 Web 服务代码中,当我使用 System.getProperty("weblogic.Name") 时,我能够获得应用程序 运行 所在的实际托管服务器,即 "MLMAppSrv01"。所以说明"weblogic.Name"确实是在JVM中定义的
当我在独立程序中使用修改后的 log4j2.xml 文件时,传入 -Dweblogic.Name=MLMAppSrv01,它工作正常并且文件创建于:
E:/MLM/MLMDomain/servers/MLMAppSrv01/logs
log4j2.xml 中的 ${} 在 WebLogic 中不起作用的原因可能是什么?
提前致谢。
如果变量指定为系统 属性 那么您需要使用 ${sys:weblogic.Name} 以便 Log4j 将使用 SystemPropertiesLookup 来解析变量。否则,您将只能访问属性部分中声明的变量。
我在 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" >
....
接下来,我没有对托管服务器名称 "MLMAppSrv01" 进行硬编码,而是使用“${weblogic.Name}”将其更改为 属性 替换,如下所示:
<?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.Name} 替换为实际的 WebLogic 服务器名称,而是简单地将 ${weblogic.Name} 视为实际的子文件夹名称,所以我最终得到了我的在文件夹中创建的日志文件:
E:/MLM/MLMDomain/servers/${weblogic.Name}/logs
在 Web 服务代码中,当我使用 System.getProperty("weblogic.Name") 时,我能够获得应用程序 运行 所在的实际托管服务器,即 "MLMAppSrv01"。所以说明"weblogic.Name"确实是在JVM中定义的
当我在独立程序中使用修改后的 log4j2.xml 文件时,传入 -Dweblogic.Name=MLMAppSrv01,它工作正常并且文件创建于:
E:/MLM/MLMDomain/servers/MLMAppSrv01/logs
log4j2.xml 中的 ${} 在 WebLogic 中不起作用的原因可能是什么?
提前致谢。
如果变量指定为系统 属性 那么您需要使用 ${sys:weblogic.Name} 以便 Log4j 将使用 SystemPropertiesLookup 来解析变量。否则,您将只能访问属性部分中声明的变量。