第一章 Logback简介

发布于:2025-04-20 ⋅ 阅读:(73) ⋅ 点赞:(0)

当有一个运行的系统时,即使是一个简单的系统,也会让团队成员充满热情。当新的图形软件系统第一次展示出一张图片时,
即使只是一个矩形,也会使努力倍增。在整个开发过程中,始终存在一个可用的系统,这有助于提高团队的工作效率。

什么是logback?

Logback 是一款旨在取代流行的 log4j 项目的日志记录系统。它由 log4j 的创始人 Ceki Gülcü 设计,并基于十年来设计工业级日志系统的经验。
相比于所有现有的日志系统,logback 更快且占用更少的资源,有时甚至有较大的优势。更重要的是,logback 提供了其他日志系统所没有的独特而实用的功能。

第一步

为了运行本章中的示例,您需要确保某些jar文件在类路径上存在。请参阅设置页面以获取更多详细信息。

要求

Logback-classic模块除了需要使用logback-classic.jar之外,还需要依赖slf4j-api.jarlogback-core.jar
logback-*.jar文件是logback的一部分,而slf4j-api-xxx.jar则包含在另一个独立的项目SLF4J中。

现在让我们开始尝试使用logback。

Example 1.1 基础模板代码

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 中定义的 Logger 和 LoggerFactory 类,具体位于 org.slf4j 包内。

在main()方法的第一行,通过调用LoggerFactory类中的静态方法getLogger获取一个Logger实例,并将其赋值到变量logger。这个日志器的名字是“chapters.introduction.HelloWorld1”。
接着调用这个日志器的debug方法,并传递了一个“Hello World.”参数。这样以来,主方法就包含了一个DEBUG级别的日志语句,消息为“Hello world”。

注意上诉示例不包含任何对logback类的引用。在许多情况下,就日志记录而言,您的类只需要导入SLF4J类。因此,大多数甚至全部的类都将使用SLF4J API,并且不会对logback的存在有任何的知觉。

您可以通过执行以下命令来运行 chapters.introduction.HelloWorld1 示例应用程序:

java chapters.introduction.HelloWorld1

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

20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.

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

Example 打印Logger状态

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应用会有以下输出:

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.xml_和_logback.xml_配置文件(稍后讨论)时,会使用一个基础的控制台ConsoleAppender作为默认策略。每一个Appender都可以视作一个输出地址。
Appenders 可以创建许多不同的输出地址,包括console、files、Syslog、TCP Sockets、JMS和许多其他地址。用户也可以轻松地创建自己的Appender,以适配其特定情况。

如果发生错误,logback会自动将内部状态打印到控制台。

在前面的例子中,我们看到了一些简单的日志记录示例。然而,在更大的应用程序中,实际的日志记录过程并不会有很大的不同。日志记录语句的一般模式不会改变。
只有配置过程会有所不同。但是,您可能希望根据自己的需求定制或配置logback。关于logback配置的内容将在后续章节中进行讲解。

在上述示例中,我们通过调用StatusPrinter.print()方法指示logback打印其内部状态。Logback的内部状态信息对于诊断与logback相关的故障非常有用。

为了在您的应用程序中启用日志记录,需要完成三个必要的步骤:

  1. 首先,您需要配置logback环境。这可以通过多种方式完成,有些方法更为复杂,以后会详细介绍。
  2. 接下来,在每个希望进行日志记录的类中,通过调用org.slf4j.LoggerFactory类的getLogger()方法来获取Logger实例,并将当前类名或类本身作为参数传递。
  3. 最后,使用此logger实例调用其打印方法,即debug()、info()、warn()和error()方法,这些方法将在已配置的appenders上产生日志输出。

构建 logback

logback是一个广泛使用的日志框架,它依赖于Maven这个开源构建工具作为其构建工具。

一旦你安装了Maven,从解压缩的日志包目录中执行mvn install命令就可以轻松地构建logback项目及其所有模块。Maven会自动下载所需的外部库。

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

如果你想在IDE下构建logback,请参阅类路径设置页面的相关部分。


网站公告

今日签到

点亮在社区的每一天
去签到