【问题标题】:Separating Log4j logs in Websphere Clustring Environment在 Websphere 集群环境中分离 Log4j 日志
【发布时间】:2013-02-15 06:32:43
【问题描述】:

我们正在使用 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 配置不应该更新吗?

【问题讨论】:

    标签: java websphere-7 log4j2


    【解决方案1】:

    您可以使用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>
    

    【讨论】:

    • 我们的做法有点不同,设置 JVM 自定义属性说 "logging.log4j.location=/home/applogs/{WAS_SERVER_NAME}" 我们可以使用它log4j 配置中的属性说
    • log4j v1.x 将是 ${logging.log4j.location} - 我在迁移指南中找到的参考资料logging.apache.org/log4j/2.x/manual/migration.html
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多