Spring Boot Logging Level设置为off时的Bug

为了更好的解释“Spring Boot Logging Level设置为off时的Bug”问题以及解决方案,我们需要先了解以下几个问题:

  1. 什么是Logging Level
  2. Spring Boot默认的Logging Level设置
  3. Logging Level为off时会出现什么问题
  4. 如何避免Logging Level为off导致的问题

现在我们按照这个顺序来详细讲解。

什么是Logging Level

Logging Level是指日志级别,可以用来设置日志的输出级别。Java Logging API和logback都支持多种级别的日志输出,通常来说,常用的日志级别包括:

  1. TRACE:最详细的日志信息,通常用于调试阶段
  2. DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的
  3. INFO:输入程序运行过程中比较重要的信息,是生产环境中的默认级别
  4. WARN:表明可能出现错误的情形,是一个警告
  5. ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行
  6. FATAL:指出每个严重的错误事件将会导致应用程序的退出

Spring Boot默认的Logging Level设置

Spring Boot默认使用的Logging框架是logback,在Spring Boot的classpath路径下可以找到一个名为“logback-spring.xml”的日志配置文件。该配置文件提供了不同Logging Level的配置。

  • root的默认Logging Level是INFO
  • Spring Boot的自动配置类默认的Logging Level是DEBUG

我们可以在“application.yml”或“application.properties”文件中进行Logging Level的修改

spring:
application:
name: myapp

logging:
level:
org.springframework: WARN
org.apache: WARN

上述示例中,我们将日志级别设置为WARN级别,对于Spring Framework和Apache相关的类来说,都只会记录WARN级别及以上级别的日志。

Logging Level为off时会出现什么问题

如果将Logging Level设置为OFF,就意味着应用将不会输出任何的日志信息,即使是出现了严重错误。这在开发和调试过程中是非常不利的,同时也会增大排查线上问题的难度。

另外,如果Logging Level设置为OFF,那么Logback将不会加载到日志配置文件,如果应用的日志系统依赖于日志配置文件,而将Logging Level设置为OFF,则会出现问题,应用可能会因为找不到配置文件而不能启动。

如何避免Logging Level为off导致的问题

以下是避免Logging Level为off导致的问题的方法:

  • 保证至少输出ERROR级别的日志。每个应用程序都应该至少记录ERROR级别的日志,以防止应用程序出现严重问题时无法掌握细节。
  • 确保不加载Logback的配置文件。当Logging Level设置为OFF时,确保不会加载日志配置文件非常重要。为此,我们可以使用CLI命令行参数-Dlogback.configurationFile和-Dlogback.disableConsoleOutput进行设置。
  • 使用枚举类型来设置Logging Level。在项目中,我们可以将Logging Level的值定义为enum枚举类型,这样可以避免在代码中误用Logging Level。

下面给出两个示例:

  1. 避免加载Logback的配置文件
@SpringBootApplication
public class MyAppApplication {

    public static void main(String[] args) {
        System.setProperty("logback.configurationFile", "logback.xml");
        SpringApplication app = new SpringApplication(MyAppApplication.class);

        if ("off".equals(System.getProperty("logging.level.root"))) {
            System.setProperty("logging.level.root", "ERROR");
            System.setProperty("logback.disableConsoleOutput", "true");
        }

        app.run(args);
    }

}

在这个示例中,我们检查Logging Level是否为“off”,如果是的话,就将Logging Level设置为ERROR,并禁用掉Logback的控制台输出功能。

  1. 使用枚举类型来设置Logging Level
public enum LoggingLevel {

    TRACE, DEBUG, INFO, WARN, ERROR, FATAL;

    static LoggingLevel fromString(String level) {
        try {
            return LoggingLevel.valueOf(level.toUpperCase());
        } catch (Exception e) {
            return LoggingLevel.INFO;
        }
    }

    public int intValue() {
        switch (this) {
            case TRACE: return 0;
            case DEBUG: return 10;
            case INFO: return 20;
            case WARN: return 30;
            case ERROR: return 40;
            case FATAL: return 50;
            default: return Integer.MAX_VALUE;
        }
    }

    public static LoggingLevel valueOf(int level) {
        for (LoggingLevel loggingLevel : LoggingLevel.values()) {
            if (loggingLevel.intValue() == level) {
                return loggingLevel;
            }
        }

        return INFO;
    }

}

在这个示例中,我们定义了一个枚举类型“LoggingLevel”,它包含了所有的Logging Level,并提供了各种方便的方法,以便我们可以更加容易地使用Logging Level。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot Logging Level设置为off时的Bug - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • boot-admin整合Quartz实现动态管理定时任务

    淄博烧烤爆红出了圈,当你坐在八大局的烧烤摊,面前是火炉、烤串、小饼和蘸料,音乐响起,啤酒倒满,烧烤灵魂的party即将开场的时候,你系统中的Scheduler(调试器),也自动根据设定的Trigger(触发器),从容优雅的启动了一系列的Job(后台定时任务)。工作一切早有安排,又何须费心劳神呢?因为boot-admin早已将Quartz这块肉串在了烤签上!项…

    Java 2023年4月27日
    00
  • Java 文件传输助手的实现(单机版)

    请允许我详细讲解“Java 文件传输助手的实现(单机版)”的完整攻略。 1. 确定需求和功能 在开始编写 Java 文件传输助手之前,我们首先要确定它需要实现的功能。在单机版的实现中,我们应该至少包含以下的功能: 用户选择要传输的文件。 用户选择接收方的 IP 地址和端口号。 用户可以选择传输的文件类型,例如文本文件或二进制文件等。 用户可以选择传输文件的方…

    Java 2023年5月20日
    00
  • 详解DES加密算法的原理与Java实现

    我会详细讲解“详解DES加密算法的原理与Java实现”的完整攻略,并包含两条示例说明。 一、DES加密算法的原理 DES是一种分组加密算法,加密时将明文分成64位一组的大小,每组的最后一位用于存储校验位。DES总共使用16个循环轮次(每轮使用一个48位的密钥子)。第一轮会将明文分成左右两部分,右部分通过跟密钥进行一个函数F运算,F函数使得输入的较小变成较大,…

    Java 2023年5月19日
    00
  • Spring Security权限想要细化到按钮实现示例

    为了实现Spring Security权限细化到按钮级别的权限控制,需要经过以下几个步骤: 步骤1,配置Spring Security 在Spring Security的配置中添加按钮级别的权限控制。 @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSec…

    Java 2023年5月20日
    00
  • 浅谈Java代码的 微信长链转短链接口使用 post 请求封装Json(实例)

    这里给出详细的攻略。 1. 背景介绍 微信公众号开发中,经常会使用到微信接口进行开发,其中短链接转化也是很常见的操作。本篇文章主要介绍如何使用 Java 代码封装微信长链接转短链接接口,使用 post 请求,并将返回结果封装为 JSON 数据。 2. 实现步骤 2.1. 导入相关 jar 包 使用 HttpClient 可以方便地发送 post 请求,并获取…

    Java 2023年5月26日
    00
  • js 判断登录界面的账号密码是否为空

    首先需要了解“js 判断登录界面的账号密码是否为空”这个问题的背景与目的。这个问题是指在前端页面中,需要判断用户输入的账号密码是否为空,以防止用户提交空的数据或者提交错误的数据,从而提高用户体验和系统安全性。 解决这个问题的核心思路是通过正则表达式对用户输入的内容进行匹配,判断是否为空。以下是具体步骤: 获取用户输入的账号和密码,可以使用document.g…

    Java 2023年6月16日
    00
  • layui table 表格模板按钮的实例代码

    本次我们简单介绍一下“layui table 表格模板按钮的实例代码”的完整攻略。 1. 基础设置 首先,我们需要引入layui框架中的table.js和laytpl.js文件。安装起来方法也非常简单,只需要执行以下代码即可。 <script src="lay/modules/table.js"></script>…

    Java 2023年6月15日
    00
  • Java连接Mysql数据库详细代码实例

    Java连接Mysql数据库详细代码实例 Java是一种跨平台语言,可以用于开发各种应用程序,包括与数据库的交互。Mysql是一种常用的开源关系型数据库,本文将介绍如何使用Java连接Mysql数据库,并提供详细的代码实例。 1. 导入Mysql驱动包 Java连接Mysql数据库需要用到相应的驱动包,可以到 Mysql官网下载最新的Mysql驱动包。 2.…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部