Java Logger2025年3月26日 | 阅读 9 分钟 在 Java 中,日志记录是一项重要的功能,有助于开发人员跟踪错误。Java 是一种自带日志记录方法的编程语言。它提供了一个在 Java 1.4 版本中引入的日志记录 API。它提供了捕获日志文件的能力。在本节中,我们将深入探讨Java Logger API。此外,我们还将介绍日志级别、组件、日志处理器或附加器、日志格式化器或布局、Java Logger 类, Java 中的日志记录是什么?在 Java 中,日志记录是一个 API,它提供了跟踪应用程序错误的能力。当应用程序生成日志调用时,Logger 会在 LogRecord 中记录该事件。之后,它会发送给相应的处理器或附加器。在将其发送到控制台或文件之前,附加器会使用格式化器或布局来格式化该日志记录。 日志记录的必要性
日志记录组件Java 日志记录组件供开发人员创建日志,并将这些日志以正确的格式传递给相应的目标。Java 日志记录 API 包含以下三个核心组件:
日志记录器 (Loggers)客户端使用的代码将日志请求发送给 Logger 对象。这些 Logger 对象会跟踪它们感兴趣的日志级别,并拒绝低于此级别的日志请求。 换句话说,它负责捕获日志记录。然后,它将记录传递给相应的附加器。 通常,Logger 对象是命名实体。实体之间用点号 (.) 分隔。例如,java.net、java.awt 等。 命名空间由 LogManager 管理,并以分层顺序表示。它必须与打包命名空间对齐。但不必严格遵循。我们也可以创建一个匿名 Logger,但它不会出现在共享命名空间中。 在日志记录命名空间中,Logger 会搜索父 Logger。它是日志记录命名空间中最接近的现有祖先。请记住,根 Logger 没有父级。它会从其父级继承各种属性,例如:
日志处理程序或附加器 (Logging Handlers or Appender)Java 日志记录 API 允许我们在 Java Logger 中使用多个处理程序,并且处理程序会相应地处理日志。Java 中有五种日志处理程序:
在 Java 日志记录 API 中,FileHandler 和 ConsoleHandler 是默认提供的两个处理程序。通过继承 Handler 类或任何子类(如 MemoryHandler、StreamHandler 等),我们可以创建自己的类并自定义 Handler 类。附加器的选择取决于日志记录的要求。如果您不确定使用哪些附加器,它可能会影响应用程序的性能。 自定义 Java 日志记录处理程序的示例日志格式化器或布局 (Logging Formatters or Layouts)日志格式化器或布局用于格式化日志消息并将数据转换为日志事件。Java SE 提供了以下两个标准的格式化器类:
SimpleFormatter它生成包含一般信息的文本消息。它会写入人类可读的日志消息摘要。ConsoleHandler 使用此类将日志消息打印到控制台。例如,以下控制台消息显示: XMLFormatterXMLFormatter 以 XML 格式生成日志消息。它会写入详细的 XML 结构信息。它是 FileHandler 的默认格式化器。日志条目如下所示: 通过继承 Formatter 类,我们可以自定义并创建自己的 Formatter 类。我们可以将自定义类与任何处理程序一起使用。 如果您正在使用日志记录框架,则可以使用其他布局,如 HTML、JSON、Syslog、纯文本等。 自定义格式化器类的示例Java 日志记录级别它提供了日志消息的重要性与紧急程度的大致指南,并控制日志记录的详细程度。每个日志级别对象都有一个整数值。值越高表示优先级越高。总共有九个级别,七个标准日志级别和两个特殊日志级别。前三个日志级别 FINEST、FINER 和 FINE 表示详细的跟踪信息,包括应用程序正在发生什么以及应用程序中发生了什么。 ![]() 下表显示了级别及其对应的数值。
让我们详细讨论每个日志记录级别。
设置日志记录级别我们可以使用以下语句来设置日志记录级别。 上面的语句将日志记录级别设置为 CONFIG,并提供与应用程序配置相关的信息。它还会从指定级别到更高级别生成日志。 假设我们将日志级别设置为 FINE,那么生成的日志将是 CONFIG、INFO、WARNING 和 SEVERE。 我们还可以通过更改 Logger 的配置来将其设置为配置文件,如下所示: 日志事件要在 Java 中记录事件,您必须确保分配一个级别以便轻松筛选出事件。要分配级别并提及消息,我们可以使用以下方法: 方法 1 在上面的语句中,我们指定了 INFO 级别,要打印的消息是 Display message。 方法 2 Java 中的 Logger 只记录 INFO 级别或更高级别的事件,为此,我们使用 setLevel() 方法。 Java Log Manager在 Java 中,LogManager 是一个属于 java.util.logging 包的类。它跟踪全局日志配置,创建和维护 Logger 实例。我们也可以使用它来设置自己的应用程序特定的配置。它包括以下两项:
可以通过使用 getLogManager() 方法检索 LogManager。它会在我们创建 LogManager 时自动初始化。此属性允许容器应用程序(如 EJB 容器)用 LogManager 的子类替换默认类。 在 Java 中创建新的 Logger我们可以使用 getLogger() 方法轻松地在 Java 中创建 Logger。如果 Logger 已定义,它会找到并返回相同的 Logger,否则会为命名子系统创建一个新的 Logger。 如果它创建一个新的 Logger,其日志级别将根据 LogManager 配置进行配置,还会配置 LogManager,并将日志输出发送到其 Handlers。它将在 LogManager 全局命名空间中注册。 语法 它将 Logger 名称作为参数解析。Logger 名称必须用点 (.) 分隔,并且应基于子系统的包名或类名。例如,java.awt、java.net 等。 如果未指定 Logger 名称,它将返回一个合适的 Logger 并抛出 NullPointerException。 示例 Java Logger 类Java 提供了一个 Logger 类,该类属于 java.util.logging 包。它包含与日志记录相关的方法。
Logger 类提供了用于日志记录的方法,这些方法分为以下五类:
因此,我们可以得出结论,LogManager 执行实际的日志记录。LogManager 的实例通过 getLogger() 方法访问。全局 Logger 实例通过 Logger 类的静态字段 GLOBAL_LOGGER_NAME 检索。它提供了对 Logging 包的方便使用。 日志框架我们还可以使用日志记录框架来简化日志记录的概念。以下是一些用于日志记录的流行日志记录框架:
|
Java 是一种通用且广泛使用的编程语言,以其健壮性和可读性而闻名。在创建具有多个属性的对象时,生成器模式是一种流行的设计选择。它提高了代码的可维护性和可读性,尤其是在处理具有许多可选属性的对象时。
5 分钟阅读
在许多编程场景中,我们面临着如何找到从一个位置 X 到另一个位置 Y 所需跳数的挑战。这种问题经常出现在算法问题中,通常通过应用方法来解决...
5 分钟阅读
什么是 CompletableFuture? CompletableFuture 用于异步编程。异步编程意味着编写非阻塞代码。它在与主应用程序线程不同的单独线程上运行任务,并通知主线程其进度、完成情况或失败情况。这样,主线程就不会...
阅读 13 分钟
CRUD代表创建、读取/检索、更新和删除,这些是针对持久存储执行的基本操作。CRUD涉及使用标准化的HTTP方法,并侧重于数据操作。CRUD操作是数据中心的,并与HTTP方法的标准化使用保持一致。CRUD...
阅读 13 分钟
在本节中,我们将创建 Java 程序,使用方法和命令行参数查找两个数字的和或加法,三个数字的和,以及 n 个数字的和。Java 中的两个数字相加 在 Java 中,查找两个数字的和...
阅读 6 分钟
霍夫曼编码算法由 David A. Huffman 于 1950 年提出。它是一种无损数据压缩机制。它也被称为数据压缩编码。它广泛用于图像(JPEG 或 JPG)压缩。在本节中,我们将讨论霍夫曼编码...
阅读 12 分钟
不使用循环打印从 N 到 1 的数字是理解 Java 中递归的一个好练习,只需将循环计数器 i 替换为递归函数的参数。平均而言,要完成重复性任务,如倒计时,您必须使用循环。但是,递归会...
阅读 4 分钟
欺凌算法 (bully algorithm) 是一种选举算法,主要用于选择一个协调者。在分布式系统中,我们需要一些选举算法,如欺凌算法和环算法,来获得一个执行其他进程所需功能的协调者。选举算法选择一个单一的...
阅读 4 分钟
字节码和机器码是编程中使用的两个重要术语。字节码是在带有 Java 虚拟机 (JVM) 的任何平台上都可以执行的编译代码。相反,机器码是可以直接由...执行的二进制代码。
阅读 2 分钟
在使用线程安全的、可调整大小的数组时,多个线程可以执行插入和删除等操作,而不会有数据损坏的风险。虽然 ArrayList 是一个标准的 Java 类,但默认情况下它不是线程安全的。可以使用并发集合或同步...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India