Skip to content

以下是一个简单的Java日志入门案例,使用Java标准库中的java.util.logging

java
import java.util.logging.Logger;

public class LogExample {

    // 获取Logger实例
    private static final Logger logger = Logger.getLogger(LogExample.class.getName());

    public static void main(String[] args) {
        // 记录不同级别的日志信息
        logger.severe("这是一个严重错误消息。");
        logger.warning("这是一个警告消息。");
        logger.info("这是一条信息消息。");
        logger.config("这是一条配置消息。");
        logger.fine("这是一条详细信息消息。");

        // 演示异常日志记录
        try {
            throw new NullPointerException("空指针异常示例。");
        } catch (NullPointerException ex) {
            logger.severe("捕获到异常:" + ex.getMessage());
            logger.severe("异常堆栈跟踪:");
            ex.printStackTrace();
        }
    }
}

此案例展示了如何使用java.util.logging.Logger记录不同级别的日志消息,包括严重错误、警告、信息、配置和详细信息。还演示了如何记录异常信息及其堆栈跟踪。可以根据需要配置日志输出位置和格式。这只是一个基础入门案例,实际应用中可能需要更复杂的配置和使用其他日志框架。

日志级别

日志级别是用来表示日志信息重要性或紧急程度的标志,不同的级别对应不同的情境和处理方式。在java.util.logging中,有七个标准的日志级别,按照从最高到最低的顺序分别是:

  1. SEVERE: 用于记录严重错误。表示程序遇到了一个无法继续执行的错误,可能导致应用程序崩溃。

  2. WARNING: 用于记录警告信息。表示程序遇到了一些可能导致问题的情况,但仍然可以继续执行。

  3. INFO: 用于记录一般信息。通常用于向开发人员或管理员提供关于应用程序运行状态的信息。

  4. CONFIG: 用于记录配置信息。通常用于记录配置参数的值,以便在调试或问题排查时了解应用程序的配置。

  5. FINE: 用于记录详细信息。提供更详细的调试信息,通常用于开发和调试阶段。

  6. FINER: 提供比FINE更详细的调试信息。

  7. FINEST: 提供最详细的调试信息。

在实际应用中,可以根据需要选择适当的日志级别,以便在不同的情况下记录不同程度的信息。通过配置日志级别,可以控制哪些信息会被记录,从而灵活地进行日志输出。例如,在生产环境中,可以将日志级别设置为WARNING或更高,以减少日志量并提高性能。在开发和调试阶段,可以将级别设置为FINE或更低,以便更详细地了解应用程序的行为。

Logging的局限性

Logging有以下局限:

  • Logging系统在JVM启动时读取配置文件并完成初始化,一旦开始运行main()方法,就无法修改配置;
  • 配置不太方便,需要在JVM启动时传递参数-Djava.util.logging.config.file=<config-file-name>

因此,Java标准库内置的Logging使用并不是非常广泛。

配置Java标准库中的java.util.logging

java.util.logging 是 Java 标准库中的日志记录框架。它提供了一种简单的日志记录方式,可以通过配置文件或编程方式进行设置。下面是一个简单的示例演示如何配置 java.util.logging

通过代码配置 java.util.logging

java
import java.util.logging.*;

public class LoggingExample {
    private static final Logger logger = Logger.getLogger(LoggingExample.class.getName());

    public static void main(String[] args) {
        // 创建一个文件处理器,将日志写入文件
        try {
            FileHandler fileHandler = new FileHandler("app.log");
            SimpleFormatter formatter = new SimpleFormatter();
            fileHandler.setFormatter(formatter);
            logger.addHandler(fileHandler);
        } catch (Exception e) {
            logger.log(Level.SEVERE, "Error creating log file", e);
        }

        // 设置日志级别
        logger.setLevel(Level.INFO);

        // 记录不同级别的日志
        logger.severe("This is a severe message.");
        logger.warning("This is a warning message.");
        logger.info("This is an info message.");
        logger.config("This is a config message.");
        logger.fine("This is a fine message.");
        logger.finer("This is a finer message.");
        logger.finest("This is the finest message.");
    }
}

通过配置文件配置 java.util.logging

你也可以使用属性文件(如 logging.properties)配置 java.util.logging,并在启动应用程序时指定该文件:

bash
java -Djava.util.logging.config.file=logging.properties YourMainClass

示例 logging.properties 文件内容:

properties
handlers=java.util.logging.FileHandler
.level=INFO

java.util.logging.FileHandler.pattern = app.log
java.util.logging.FileHandler.level = ALL
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

这只是一个简单的示例,java.util.logging 还支持更多的配置选项,可以根据需求进行进一步配置。具体配置项和参数的含义可以参考官方文档或相关资源。