java - 删除文件后,Logback 不会重新创建日志文件

标签 java tomcat spring-boot logging logback

我有一个在 Tomcat 服务器上运行的记录器应用程序。我在 spring boot 框架上使用 logback。 下面是我的 logback.xml 文件

<configuration debug="true">
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/var/log/audit/audit.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/var/log/audit/audit_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 50MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.logger.rest">
        <appender-ref ref="FILE" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

我的应用程序正确记录到/var/log/audit/audit.log。但在某些时候我需要删除日志文件。删除后,我注意到调用记录器应用程序时没有创建新的 audit.log 文件。只有当我重新启动记录器应用程序时,才会生成新的日志文件。

有什么方法可以绕过应用重启,以便 logback 自动创建一个新的 audit.log 文件(在创建日志信息时),以防它被删除

最佳答案

当你的应用程序正在运行时(并且你的应用程序中的 Logback 有一个打开的日志文件句柄)如果你删除日志文件那么 Logback 将不知道该文件已被删除(因为 Logback 进程仍然有一个打开文件句柄)但由于文件已被删除 Logback 实际上无法将任何内容写入磁盘并且这种情况一直存在直到重新初始化 Logback(并且您的 FileAppender 重新创建文件)。通常,这将在应用程序启动时完成。

有一个 open issue反对 Logback 在这种情况下请求更改 Logback 的行为。

删除应用程序的日志子系统(即 Logback)配置为在应用程序处于 Activity 状态时写入的文件有些不寻常。 Activity 。也许您试图通过删除文件来解决的问题可以通过其他方式解决?如果不是,即如果您必须能够删除一个运行中的日志文件并期望 Logback 创建一个新文件,那么我认为您的选择是:

  • Vote for issue并希望尽快解决
  • 提交 PR 以修复该问题
  • Fork Logback 并创建您自己的补丁版本

关于java - 删除文件后,Logback 不会重新创建日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954380/

相关文章:

tomcat - 初始化 PortletRequestListener 时出现异常

java - Tomcat 没有上传所有文件

spring-boot - 具有 Spring-Boot 和发布管理的微服务

java - 如何在 Spring Boot 应用程序中配置 DispatcherServlet?

java - Spring MVC Scala 应用程序仅返回index.html页面,其余路由不起作用

java - 如果不扩展 JFrame 需要做出调整吗?

Java - 多线程CPU缓存

java - 远程 Ubuntu tomcat 8.5 上的 war 部署不起作用 - 但在本地 tomcat 8.5 上工作

java - Camel REST 服务在返回 null 时抛出异常

java - DateTimeParseException 通过解析日期字符串