Java 在WebSphereCluString环境中分离Log4j日志

Java 在WebSphereCluString环境中分离Log4j日志,java,websphere-7,log4j2,Java,Websphere 7,Log4j2,我们使用Log4j来登录我们的web应用程序。我们的应用程序部署在Websphere集群环境中 例如: 有一台主机有两个不同的JVM,其中部署了web应用程序 Host-1 JVM -1 [App-1, App-2] JVM -2 [App-1, App-2] App-1的Log4j配置为: 但这里的问题是不同的JVM日志被写入同一个文件/home/applogs/app-1.log 有没有办法为集群环境配置单独的日志文件?所以,如果我们在1个JVM、2个JVM或3

我们使用Log4j来登录我们的web应用程序。我们的应用程序部署在Websphere集群环境中

例如:

有一台主机有两个不同的JVM,其中部署了web应用程序

Host-1      
  JVM -1 [App-1, App-2]
  JVM -2 [App-1, App-2]
App-1的Log4j配置为:


但这里的问题是不同的JVM日志被写入同一个文件/home/applogs/app-1.log


有没有办法为集群环境配置单独的日志文件?所以,如果我们在1个JVM、2个JVM或3个JVM中部署应用程序,我的Log4j配置不应该更新吗

您可以使用
ManagementFactory.getRuntimeMXBean().getName()
在运行时查找JVM的进程ID以获得唯一的文件名,然后您需要在运行时更新记录器的文件名。看一看如何做这件事。全部:

添加到您的主方法中:

//set a property to the JVM-Name
System.setProperty("logFilename", ManagementFactory.getRuntimeMXBean().getName());
//update the Logger context to relead the filename with the lookup
LoggerContext ctx =  (LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
在log4j2.xml中使用带文件名查找的追加器:

<appenders>
<File name="MyFile" fileName="${sys:logFilename}.log">
    <PatternLayout pattern="%-4r %d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>


我们以一种稍微不同的方式实现了这一点,将JVM自定义属性设置为“logging.log4j.location=/home/applogs/{WAS_SERVER_NAME}”,我们可以在log4j配置中使用这个属性,比如log4j v1.x的${logging.log4j.location},我在迁移指南中找到了这个属性
<appenders>
<File name="MyFile" fileName="${sys:logFilename}.log">
    <PatternLayout pattern="%-4r %d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>