Java Log4j vs Logback:并发写入同一日志?
我有几个web应用程序在同一个tomcat上运行 我有两个问题: 1-通过搜索,我了解到当存在多个应用程序时,登录到同一个文件可能会出现一些问题。对于在同一web服务器上运行的多个应用程序,情况就是这样吗?当使用默认标准输出时,这也正确吗 2-在Logback库中有一种谨慎的模式: 在谨慎模式下,FileAppender将安全地写入指定的文件,即使存在运行在不同JVM(可能运行在不同主机上)中的其他FileAppender实例。审慎模式的默认值为false 我想知道使用Logback是否只对多个JVM有利,还是对运行在同一web服务器上的多个we应用程序有利?如果不是,在这方面是否与log4j相同 谢谢Java Log4j vs Logback:并发写入同一日志?,java,web-applications,logging,log4j,logback,Java,Web Applications,Logging,Log4j,Logback,我有几个web应用程序在同一个tomcat上运行 我有两个问题: 1-通过搜索,我了解到当存在多个应用程序时,登录到同一个文件可能会出现一些问题。对于在同一web服务器上运行的多个应用程序,情况就是这样吗?当使用默认标准输出时,这也正确吗 2-在Logback库中有一种谨慎的模式: 在谨慎模式下,FileAppender将安全地写入指定的文件,即使存在运行在不同JVM(可能运行在不同主机上)中的其他FileAppender实例。审慎模式的默认值为false 我想知道使用Logback是否只对多个
有一件事必须澄清:当Log4j的不同实例同时写入同一文件时,无论是否在同一JVM中运行,都会出现问题 当使用服务器(和不同的类加载器)时,根据部署和配置,Log4j可能有一个服务器范围的实例或多个实例
在log4j和logback中,如果多个
FileAppender
实例写入同一日志文件,则所述日志文件损坏的风险很高。无论FileAppender
实例是在同一JVM上运行还是在不同JVM上运行都是无关的,即损坏的风险是相同的
正如文档中提到的,在logback中的FileAppender
将避免损坏,即使存在在相同或不同JVM中运行的其他FileAppender
实例,这些实例可能运行在不同的主机上。默认情况下,审慎模式处于禁用状态
控制台不能被破坏,因此这个问题是没有意义的。使用文件锁实际上从来都不是有效/安全的,因此当从不同的Appender/JVM的作品登录到同一个文件时,不建议这样做。请参阅我直接从中获取的配置。
SocketAppenders可能有点粗糙,因为您可能不打算为logback编写太多代码
还有一个选择。您可以使用类似的工具,它可以完全解决您遇到的问题。我们可以详细说明问题是什么吗?这些是:混合行、一行中混合内容、丢失日志、滚动文件名问题?
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVM writing to the same log file -->
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>