Logback 手册 - 第一章:简介

The morale effects are startling. Enthusiasm jumps when there is a running system, even a simple one. Efforts redouble when the first picture from a new graphics software system appears on the screen, even if it is only a rectangle. One always has, at every stage in the process, a working system. I find that teams can grow much more complex entities in four months than they can build.

士气的效果令人惊人。当有一个运行中的系统,即使是一个简单的系统时,热情会激增。当屏幕上出现来自新图形软件系统的第一张图片时,即使只是一个矩形,付出的努力也会加倍。在整个过程的每个阶段,总是有一个可工作的系统。我发现,团队在四个月的时间里可以构建比他们能够建立的更复杂的实体。

--- 弗雷德里克·P·布鲁克斯,《神话般的程序员月份》


什么是 logback?

Logback 旨在成为流行的 log4j 项目的继任者。它由 log4j 的创始人 Ceki Gülcü 设计。它基于十年的经验,在设计工业级日志系统方面积累了丰富经验。由此产生的产品,即 logback,在速度和占用空间方面比所有现有的日志系统都更快,有时差距很大。更重要的是,logback 提供了其他日志系统中缺少的 独特而非常有用的功能

第一步

要求

除了类路径上的 logback-classic.jar 之外,Logback-classic 模块还需要 slf4j-api.jarlogback-core.jar 的存在。

logback-*.jar 文件是 logback 发行版的一部分,而 slf4j-api-2.0.7.jar 则随着 SLF4J(一个单独的项目)一起发布。

现在让我们开始使用 logback 进行实验。

示例 1.1:日志记录的基本模板(logback-examples/src/main/java/chapters/​introduction/HelloWorld1.java

java 复制代码
package chapters.introduction;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld1 {

  public static void main(String[] args) {

    Logger logger = LoggerFactory.getLogger(​"chapters.introduction.​HelloWorld1");
    logger.debug("Hello world.");

  }
}

HelloWorld1 类定义在 chapters.introduction 包中。它首先导入了 SLF4J API 中定义的 LoggerLoggerFactory 类,它们位于 org.slf4j 包中。

main() 方法的第一行,变量 logger 通过调用 LoggerFactory 类的静态 getLogger 方法来获取一个 Logger 实例。该记录器的名称是 "chapters.introduction.​HelloWorld1" 。main 方法继续调用此记录器的 debug 方法,并将 "Hello World" 作为参数传递给它。我们说主方法包含一个级别为 DEBUG 的日志记录语句,消息为 "Hello world"。

请注意,上面的示例没有引用任何 logback 类。在大多数情况下,就日志记录而言,您的类只需要导入 SLF4J 类即可。因此,您的大多数(如果不是全部)类将使用 SLF4J API,并且对 logback 的存在毫不知情。

您可以使用以下命令运行第一个示例应用程序 chapters.introduction.​HelloWorld1

bash 复制代码
java chapters.introduction.​HelloWorld1

运行 HelloWorld1 应用程序将在控制台上输出一行。由于 logback 的默认配置策略,在找不到默认配置文件时,logback 将向根记录器添加一个 ConsoleAppender

java 复制代码
20:49:07.962 [main] DEBUG chapters.introduction.​HelloWorld1 - Hello world.

Logback 可以使用内置的状态系统报告其内部状态信息。可以通过名为 StatusManager 的组件访问 logback 生命周期中发生的重要事件。目前,让我们通过调用 StatusPrinter 类的静态 print() 方法,指示 logback 打印其内部状态。

示例:打印日志记录器状态(logback-examples/src/main/java/chapters/​introduction/HelloWorld2.java

java 复制代码
package chapters.introduction;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.​LoggerContext;
import ch.qos.logback.core.​util.StatusPrinter;

public class HelloWorld2 {

  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(​"chapters.​introduction.HelloWorld2");
    logger.debug("Hello world.");

    // print internal state
    LoggerContext lc = (LoggerContext) LoggerFactory.​getILoggerFactory();
    StatusPrinter.print(lc);
  }
}

运行 HelloWorld2 应用程序将产生以下输出:

java 复制代码
12:49:22.203 [main] DEBUG chapters.introduction.​HelloWorld2 - Hello world.
12:49:22,076 |-INFO in ch.qos.logback.classic.​LoggerContext[default] - Could NOT find resource [logback.groovy]
12:49:22,078 |-INFO in ch.qos.logback.classic.​LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.​LoggerContext[default] - Could NOT find resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.​LoggerContext[default] - Setting up default configuration.

Logback 解释说,由于找不到 logback-test.xmllogback.xml 配置文件 (稍后讨论),它使用默认策略进行配置即基本的 ConsoleAppenderAppender 是一个可以看作是输出目标的类。有许多不同的目标可以用于 Appender,包括控制台、文件、Syslog、TCP Sockets、JMS 等等。用户还可以根据自己的具体情况轻松创建自己的 Appender

请注意,在出现错误时,logback 将自动在控制台上打印其内部状态。

上面的例子相当简单。在更大的应用程序中进行实际的日志记录不会有太大的不同。日志记录语句的一般模式不会改变。只有配置过程会有所不同。但是,您可能希望根据自己的需求自定义或配置 logback。后续章节将介绍 logback 配置。

请注意,在上面的示例中,我们通过调用 StatusPrinter.print() 方法指示 logback 打印其内部状态。在诊断与 logback 相关的问题时,logback 的内部状态信息非常有用。

以下是在应用程序中启用日志记录的三个必要步骤的列表。

  1. 配置 logback 环境。您可以以几种不同的方式进行配置,这些将在后面详细介绍。
  2. 在希望执行日志记录的每个类中,通过调用 org.slf4j.LoggerFactory 类的 getLogger() 方法,传递当前类名或类本身作为参数,检索一个 Logger 实例。
  3. 使用此记录器实例,调用其打印方法,即 debug()info()warn()error() 方法。这将在配置的 Appender 上产生日志输出。

构建 logback

logback 依赖于 Maven,一个广泛使用的开源构建工具。

一旦您安装了 Maven,构建 logback 项目(包括所有模块)就会变得非常简单,只需在解压 logback 分发目录所在的目录中发出 mvn install 命令即可。Maven 将自动下载所需的外部库。

Logback 分发版包含完整的源代码,因此您可以修改 logback 库的某些部分并构建自己的版本。只要遵守 LGPL 许可证或 EPL 许可证的条件,您甚至可以重新分发修改后的版本。

有关在 IDE 下构建 logback 的详细信息,请参阅 类路径设置页面上的相关部分

版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:www.liujiajia.me/2023/12/4/l...

相关推荐
阿飞OnePiece7 个月前
springboot工程中使用slf4j+logback实现日志唯一编号
spring boot·apache log4j
洛小豆7 个月前
SpringBoot日志管理 —— 解决Logback生成 "LOG_PATH_IS_UNDEFINED" 文件夹问题
spring boot·后端·apache log4j
半夏之沫8 个月前
十年经验竟不懂Springboot日志
spring boot·spring·apache log4j
不识君8 个月前
动态调整Logback的Appender的解决方案
java·apache log4j
用户426670591698 个月前
项目中如何配置和使用Log4j2.x
后端·apache log4j
hashcon9 个月前
【硬核】Log4j2 与 Logback 当初的选型以及在当前云原生环境下的反思与展望
java·spring·apache log4j
winjeg9 个月前
logback VS log4j2 那些你注意不到的性能差距...
java·spring·apache log4j
乐乐家的乐乐10 个月前
怎么说,手写一个日志框架
java·后端·apache log4j
佳佳_1 年前
Logback 手册 - 第八章:映射诊断上下文
apache log4j
佳佳_1 年前
Logback 手册 - 第六章:布局 - 2
apache log4j