Log4j vs Logback:并发写入同一日志?

2022-09-03 01:09:52

我有几个Web应用程序在同一个tomcat上运行。

我有两个问题:

1-通过搜索,我了解到当存在多个应用程序时,登录到同一文件可能会产生一些问题。在同一 Web 服务器上运行的多个应用程序是否属于这种情况?当使用默认标准输出时,这也是正确的吗?

2-在Logback库中有一个谨慎的模式:

在谨慎模式下,FileAppender 将安全地写入指定的文件,即使存在其他 FileAppender 实例在不同的 JVM 中运行,这些实例可能在不同的主机上运行。谨慎模式的默认值为 false。

我想知道使用Logback是否仅在多个JVM上有利,或者对于在同一Web服务器上运行的多个应用程序也是有利的?如果不是,它在这方面是否与log4j相同?

谢谢


答案 1

在log4j和logback中,如果多个实例写入同一日志文件,则该日志文件损坏的风险很高。实例是在同一个JVM上运行还是在不同的JVM上运行是无关紧要的,即损坏的风险是相同的。FileAppenderFileAppender

如文档中所述,在谨慎模式下,日志备份将避免损坏,即使存在以相同或不同 JVM 运行的其他实例,这些实例可能在不同的主机上运行。默认情况下,谨慎模式处于禁用状态。FileAppenderFileAppender

控制台无法损坏,因此问题没有实际意义。


答案 2

有一件事必须澄清:当Log4j的不同实例同时写入同一文件时,无论是否在同一JVM中运行,都会出现问题。

使用服务器(和不同的类装入器)时,可以具有单个服务器范围的实例或多个 Log4j 实例,具体取决于部署和配置。

  1. 见上文。Stdout 可能会遇到相同的混合输出问题,但在旋转文件时不会。
  2. Logback的谨慎模式将解决不同实例(是否相同的JVM)的并发写入问题。如果您的配置使用服务器范围的 Log4j 实例,则此方面没有任何优势。

推荐