Jetty 访问日志写入 .tmp 文件

Jetty access logs writing to a .tmp file

我观察到的问题:

在一天中的随机时间,日志开始转到 .tmp 文件 access.log6732547707051856.tmp(它有从 00:00:00 到 00:00:01 的日志,我猜这是可以接受的,当翻转发生时)和 access.log6844458502795078.tmp 是两个有日志的文件。

记录器继续登录到最新的 tmp 文件。我观察到它在早上 6 点左右开始写入 .tmp 文件并继续在那里写入的情况。 这将在下一卷停止,即 00:00:00(午夜),其中压缩了 access.log 文件。 .tmp 文件在此之后仍然存在。

  1. 为什么临时文件不消失?
  2. 为什么它会在不应该发生翻转的时候写入临时文件?

系统详情:

我使用的Jetty版本:8.1.15

我正在用

实例化一个新的 RequestLogHandler
RequestLogImpl requestLog = new RequestLogImpl();
requestLog.setFileName("logback-access.xml");
requestLogHandler.setRequestLog(requestLog);

logback-access.xml

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/var/log/service/package/access-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
        <maxHistory>10</maxHistory>
    </rollingPolicy>

这是 logback 实现的一个未解决的错误,通常在滚动与其 gzip / 压缩层结合使用时看到。

我的情况略有不同,因为我看到 tmp 文件带有 logback classic 1.1.3 而不是 logback 访问。

我正在使用具有最大文件大小的 Rolling File Appender。请参阅下面我的最终工作配置。

我的问题是由

之间的差异引起的
  <appender ..
    <file>${catalina.base}/logs/app-info.log</file>

  <appender ...
    <rollingPolicy ...
    <fileNamePattern>logs/app-info-%d{yyyy-MM-dd,UTC}-%i.log.gz</fileNamePattern>

注意两个文件路径之间的区别。 与 <file> 不同,<fileNamePattern> 不以“${catalina.base}/”开头。

一旦我使这两条路径相似,我就不再看到在日志滚动时生成新的 tmp 文件。 Logback 现在生成所需的 log.gz 文件。现有的 tmp 文件保持原样。

最终工作配置。

<appender name="RollingFile"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/app-info.log</file>
    <!-- daily rollover -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/app-info-%d{yyyy-MM-dd,UTC}-%i.log.gz</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!--  or whenever the file size reaches 100MB -->
            <maxFileSize>100MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    ...
</appender>