😊 @ 作者: 一恍过去
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: Java开发基础系列(十一):断言与日志捕获
⏱️ @ 创作时间: 2023年07月24日

在这里插入图片描述

断言

Java断言是一种用于在代码中插入检查点(assertion)的机制。它在开发和调试阶段中用于验证程序的假设条件是否成立。断言的主要目的是在代码中插入一些条件检查,以确保在程序运行时满足特定的条件,从而帮助开发者发现代码中的逻辑错误和异常情况。

  • 基本语法:
    assert 条件 : 表达式;
    
    • 条件:是一个布尔表达式,用于检查假设条件是否为真。如果条件为真,断言通过,程序继续执行。如果条件为假,断言失败,会抛出AssertionError异常。
    • 表达式:可选的,是一个表达式,通常用于在断言失败时提供附加的信息或数据,便于调试。

开启断言:
Java断言默认情况下是禁用的,为了启用断言,需要使用-ea选项来运行Java程序,比如:

java -ea YourClassName

断言示例:
使用断言来检查数字是否满足要求。如果不满足条件(小于10),断言会失败,抛出AssertionError异常,并输出指定的错误信息。如果满足条件,断言通过,程序继续执行。

public class AssertionExample {
    public static void main(String[] args) {
        int a = 10;
        assert age >= 10 : "不能小于10";
        System.out.println("断言验证通过!");
    }
}

断言主要用于开发和调试阶段,不应该用于替代正常的异常处理。在发布版本的代码中,建议关闭断言,以避免性能损失,并确保代码的稳定性。要注意的是,使用断言应该小心谨慎,避免在生产环境中产生不必要的副作用。

日志记录

Java日志记录是一种用于在程序运行时记录信息、警告和错误的机制。它是一种重要的调试和监控工具,用于收集应用程序的运行时信息,方便开发者在程序出现问题时进行诊断和调试。

Java提供了自己的日志记录API,主要位于java.util.logging包中。除了Java自带的日志记录API外,还有许多第三方日志框架可供选择,比如Log4j、Logback和Slf4j等。这些框架提供了更丰富的功能和更灵活的配置选项。

  • 使用示例:

    import java.util.logging.Logger;
    
    public class LoggingExample {
        private static final Logger LOGGER = Logger.getLogger(LoggingExample.class.getName());
    
        public static void main(String[] args) {
            LOGGER.info("这是一条信息日志");
            LOGGER.warning("这是一条警告日志");
            LOGGER.severe("这是一条严重错误日志");
        }
    }
    
  • Logger对象的日志级别:

    • SEVERE(最高级别):表示最严重的错误信息,通常表示程序出现了严重的问题,可能导致程序无法正常工作或崩溃。
    • WARNING:表示警告信息,表示程序出现了一些可能会导致问题的情况,但程序仍然可以继续执行。
    • INFO:表示一般信息,用于记录程序的正常流程、状态信息或关键事件,帮助了解程序的运行状况。
    • CONFIG:表示配置信息,通常用于记录一些配置相关的信息。
    • FINE:表示细粒度的调试信息,用于调试程序时记录详细的信息,对于一般情况不会输出。
    • FINER:表示更细粒度的调试信息,用于记录比FINE更详细的信息。
    • FINEST(最低级别):表示最细粒度的调试信息,通常用于记录非常详细的信息,对于一般情况不会输出。

日志级别的作用是控制日志输出的程度,可以根据不同的应用场景和需求来选择合适的日志级别。在开发和调试>阶段,通常会使用较低级别(如FINE、FINER、FINEST)的日志级别来输出详细的调试信息,以便更好地理解>程序的执行过程和排查问题。而在生产环境中,为了避免过多的日志输出影响性能和浪费存储空间,通常会使用>较高级别(如INFO、WARNING、SEVERE)的日志级别来记录关键信息和错误,帮助监控和排查生产问题。

注意: 高级别日志不会打印低级别日志信息,比如:WARNING级别的日志,不会打印INFO级别的日志输入,可以通过Logger.setLevel();设置日志级别,比如:

import java.util.logging.Level;
import java.util.logging.Logger;
public class LoggingExample {
   public static void main(String[] args) {
       // 获取Logger对象,通常使用类的全限定名作为Logger的名称
       Logger logger = Logger.getLogger(JobServiceImpl.class.getName());

     // 设置日志记录器的级别为FINE
       logger.setLevel(Level.WARNING);

      // 打印不同级别的日志信息
      logger.severe("This is a severe error message."); // 输出日志,因为SEVERE级别高于WARNING
      logger.warning("This is a warning message."); // 输出日志,因为WARNING级别相同
      logger.info("This is an info message."); // 不会输出,因为INFO级别低于WARNING
   }
}

在这里插入图片描述

Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐