Logback RollingFileAppender 无法同时写入同一日志?

Logback RollingFileAppender not working in concurrent writing to same log?

我们有一个桌面应用程序,最近向 system.All 引入了 logback,如果我们 运行同一应用程序日志文件的两个客户端即使超过其 limit.If 也不会滚动 一个客户端关闭滚动发生得很好。

<appender name="LOG-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>\log\log.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>\log\old\log.%d{yyyyMMdd}_%i.txt</fileNamePattern>
    <maxHistory>2</maxHistory>
    <timeBasedFileNamingAndTriggeringPolicy
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>100KB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
    <Pattern>%d{yyyy.MM.dd HH:mm:ss} > [%thread] %-5level - %msg%n</Pattern>
</layout>

默认情况下支持从多个应用程序写入同一个文件(它可能适合您,但当它们同时尝试写入时您会看到意外行为)。

您可以通过为您的 appender 启用 prudent mode 来解决这个问题。这是通过将 prudent="true" 设置为 <appender> 标签的属性来完成的。

请注意,对于 RollingFileAppender extra restrictions 适用。对您来说这意味着您不能指定 'file' 属性。另外你不能使用 SizeAndTimeBasedFNATP 但你必须更改为 TimeBasedRollingPolicy.