java - 在 Websphere Clustring 环境中分离 Log4j 日志

标签 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 配置是:

<log4j:configuration debug="true">
    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
        <appender-ref ref="FileOut" />
    </appender>
    <appender name="FileOut" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="/home/applogs/app-1.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="10MB" />
        <param name="MaxBackupIndex" value="5" />
        <param name="Threshold" value="ALL" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d %-5p - %m%n" />
        </layout>
    </appender>   
    <root>
        <level value="INFO" />
        <appender-ref ref="ASYNC" />
    </root>    
</log4j:configuration>

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

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

最佳答案

您可以使用 ManagementFactory.getRuntimeMXBean().getName() 在运行时查找 JVM 的 ProcessID 以获得唯一的文件名,然后您需要以某种方式在运行时更新文件名记录器。看看this Answer去做这个。完整的:

添加到你的主要方法:

//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 中使用一个带有文件名查找的 Appender:

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

关于java - 在 Websphere Clustring 环境中分离 Log4j 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14889426/

相关文章:

java - 重新定义/ rebase native 方法

jsp - 使用 Websphere 共享库..问题 : Unable to locate tag library for uri http://struts. apache.org/tags-html 为什么?

Java SAP 通信

java - 从 URLConnection 读取二进制文件

java - 使用 userID 获取 Facebook 的大头像

java - 消息驱动 Bean 读取同一消息两次

java - 404 NoTargetForURIException 访问 Websphere 7 下的 WebContent 文件夹中的静态资源

java - log4j AbstractFilter.equals() 似乎执行对象身份等于

java - 如何设置 log4j2 asyncQueueFullPolicy

java - 允许使用编码包装器在日志记录输出中使用尖括号