当前位置: 首页 > 知识库问答 >
问题:

日志记录失败时停止Spring Boot应用程序(log4j2)

姬选
2023-03-14

我有一个标准的Spring Boot微服务,它使用Log4j2进行所有日志记录。

我想优雅地关闭spring boot应用程序,以防日志记录失败(例如磁盘已满)。有办法设置吗?

共有1个答案

葛勇锐
2023-03-14

我想您需要做的是通过其他机制来检测剩余磁盘,而不是依赖于记录器来检测它。Spring引导执行器用于提供包括内存和磁盘在内的许多度量。它使外部服务能够通过HTTPendpoint从正在运行的实例中获取度量。

看看actuctor如何获得磁盘空间:https://github.com/spring-projects/spring-boot/blob/v2.3.3.release/spring-boot-project/spring-boot-actuctor/src/main/java/org/springframework/boot/actuate/system/diskspacehealthindicator.java可以看出这个机制很简单:

@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
    long diskFreeInBytes = this.path.getUsableSpace();
    if (diskFreeInBytes >= this.threshold.toBytes()) {
        builder.up();
    }
    else {
        logger.warn(LogMessage.format("Free disk space below threshold. Available: %d bytes (threshold: %s)",
                diskFreeInBytes, this.threshold));
        builder.down();
    }
    builder.withDetail("total", this.path.getTotalSpace()).withDetail("free", diskFreeInBytes)
            .withDetail("threshold", this.threshold.toBytes()).withDetail("exists", this.path.exists());
}

在main application类中,可以定期检查磁盘空间,如果磁盘空间低于特定阈值,则使用与上面所示相同的机制关闭应用程序上下文。关闭应用程序可能是这样的:

int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {
@Override
public int getExitCode() {
        // return the error code
        return 0;
    }
});

 
System.exit(exitCode);
 类似资料:
  • 我想用SpringBoot1.5配置log4j。10.释放。我排除了,并添加了log4j依赖项。在spring启动之前,我有所有日志,但在spring启动之后,init日志停止。 控制台日志: 和log4j2。xml文件: 你知道我做错了什么吗?

  • 我一直在尝试关闭石英的恼人的调试日志记录。我使用log4j作为日志框架,我已经尝试将这一行添加到lg4j属性文件中 我仍然收到大量的调试日志消息 如何关闭此功能? 编辑。我已经将我的配置移动到xml文件...但仍然遇到同样烦人的问题 编辑2。。。这是我的pom。xml文件(有趣的部分) 类路径中的EDIT3 jar

  • 我有一个使用Spring Boot开发的微服务。应用程序部署在pivotal cloud Foundry。我已经在logback.xml中设置了日志级别,它是应用程序的一部分。为了更改日志级别,我必须更新logback.xml并重新构建/重新部署应用程序。有没有更好的方法做到这一点,而不必重新部署应用程序?有没有办法在PCF中将日志级别设置为env变量?

  • 需要帮助...我在这里做错了什么???我相信它确实从应用程序属性文件中读取路径和文件名。但我不认为它读取了logback.xml或logback-spring.xml 我做了一些研究,发现了许多问题/答案。但是我想每个人都说要把logback xml放在资源中,把路径和文件名放在application.properties.我知道这很简单,但是在某个地方遗漏了一些东西… 提前谢谢!! 应用程序属性

  • 我不能成功的屏幕录制,它开始录制ok,但当它停止应用程序崩溃 错误:

  • 我目前正在使用Azure'Web应用Linux',它利用docker容器通过私有注册表(Azure容器注册表)托管java应用和python应用,我还没有找到收集和分析应用程序日志的方法容器。 目标是通过OMS、application insight或storage analytics分析应用程序日志。我知道“linux上的Web应用程序”仍处于预览状态,但没有关于当前支持哪些功能的官方文档。 A