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
.
我们有一个桌面应用程序,最近向 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
.