java Log4j2 2.3版中多个JVMS写入同一个日志文件

ql3eal8s  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(204)

我们正在升级一个遗留应用程序以使用log4j2。因为应用程序服务器(Weblogic10.3.6.0)不支持servlet 3.0,所以我们的上限是servlet 2.5,最高可以达到Log4j版本2.3。
我们有4个JVM运行在应用服务器上。每个服务器有1个log4j2配置,所以所有4个JVM都使用相同的配置。我们可以通过附加JVM名称来分离日志文件。
我们想知道是否可以删除JVM名称,并让所有JVM写入同一个日志记录器?我们无法使用异步日志记录器,并认为可能存在同步文件锁定问题。
谁能确认一下,我们是否可以将所有4个JVMS的日志输出合并到一个文件中,或者最好将它们分开到每个JVM中。
谢谢你

wpx232ag

wpx232ag1#

如果你想让多个JVM写入同一个文件,你必须使用文件锁定(文件附加器上的locking=“true”)。但是,RollingFileAppender不支持文件锁定,因为它不能安全地完成。文件锁定也会影响写入日志文件的性能。

5jvtdoz2

5jvtdoz22#

试试这个SharedRollingFileAppender
配置文件log4j2.yaml
测试SharedRollingFileAppenderTest

<dependency>
  <groupId>org.droolsassert</groupId>
  <artifactId>da-utils</artifactId>
</dependency>

附加参数:
fileLock-用于共享锁的文件路径(如果需要,将创建)。同一个锁可以用于不同的appender。
resourceLock-用于共享锁的资源路径(不能打包在归档中)。
messageQueueSize-用于缓冲异步处理的消息队列大小,以减轻繁重的文件锁定操作时间默认1 K。
writerThreadKeepAliveTimeSec-如果值大于零,则作为关闭后台非守护进程的时间写入器线程保证消息在后台线程中刷新到文件系统,但不阻止JVM空闲时正常关闭,少数消息可能会有短暂的延迟(~0.3s)启动工作线程。如果value为零,启动无尽守护进程工作线程不会阻止正常的JVM关闭,但不能保证在关闭前处理消息。这种方法没有写时延迟,并且在空闲时间之后可以连续地重新创建工作线程(适用于长时间运行的应用程序)

相关问题