多个RollingFileAppenders写入同一个文件
问题描述:
我有两个上下文运行在相同的JVM和Tomcat实例中,我想使用logback RollingFileAppender写入相同的日志文件。如果我使用同一个文件,Logback RollingFileAppender是否同步以防止出现任何问题?我担心滚动的文件无法正常工作,以及一些日志被覆盖。多个RollingFileAppenders写入同一个文件
logback文档mention a prudent mode,但这表示性能受到影响,仅指从不同的JVM登录到同一文件。我将在同一个JVM中运行。
这是我的logback.xml的一个例子。我希望在每个上下文中有两个单独的WAR文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/portal.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>portal.%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d [%t] %-5p %c - %m%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
答
查看源代码显示doAppend()方法已同步。 rollover()方法中的一条评论说,由于doAppend()是不需要同步的。
你可能仍然会碰到的问题,虽然。
答
我以这种方式使用RollingFileAppender,并且面临与您相同的问题。只有在您从配置中删除<file>
元素时,它才会起作用。但是,所有文件都被命名为例如portal.2013-12-03.log
等。如果你能忍受这一点,那么你就去。
不过,我需要一个像portal.log
这样的恒定文件名作为活动日志,因为这些日志文件上运行着一些监视。但我还没有发现如何可能。我猜Windows也在这里造成一些麻烦......
这是真的。我想知道是否有人以这种方式使用了RollingFileAppender,或者如果有记录,我可能只是没有看到。 – acvcu 2013-02-11 17:02:15