第一章:简介

**士气的影响令人震惊。如果有一个正在运行的系统,甚至是一个简单的系统,热情就会跳跃。当新图形软件系统中的第一张图片出现在屏幕上时,即使只是矩形,也会加倍努力。在过程的每个阶段,始终都有一个工作系统。我发现团队可以在四个月内 Developing 出比构建起来更复杂的实体.

— JR.FREDERICK P. BROOKS,《神话人月》 ***

什么是注销?

Logback 旨在作为流行的 log4j 项目的后继者。它是由 log4j 的创始人 CekiGülcü设计的。它以在设计工业强度测井系统方面获得的十年经验为基础。与所有现有的日志记录系统相比,最终的产品(即 logback)速度更快,占用空间更小,有时间隔很大。同样重要的是,logback 提供了其他日志系统中缺少的独特而实用的功能

迈出第一步

Requirements

Logback-classic 模块除了在 Classpath 上的* logback-classic.jar 外,还需要 slf4j-api.jar logback-core.jar *的存在。

  • logback-*。jar 文件是 logback 发行版的一部分,而 slf4j-api-2.0.0-alpha1.jar *带有单独的项目SLF4J

现在让我们开始尝试 logback。

示例 1.1:用于记录日志的基本模板(logback-examples/src/main/java/chapters/introduction/HelloWorld1.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的变量分配了一个Logger实例,该实例是通过从LoggerFactory类中调用静态getLogger方法来检索的。该 Logger 名为“ chapters.introduction.HelloWorld1”。 main 方法 continue 调用此 Logger 的debug方法,并传递“ Hello World”作为参数。我们说 main 方法包含 DEBUG 级的日志记录语句,消息为“ Hello world”。

请注意,以上示例未引用任何 logback 类。在大多数情况下,就日志记录而言,您的类仅需要导入 SLF4J 类。因此,绝大多数(如果不是全部)类都将使用 SLF4J API,并且不会考虑存在 logback。

您可以使用以下命令启动第一个示例应用程序* chapters.introduction.HelloWorld1 *:

java chapters.introduction.HelloWorld1

启动HelloWorld1应用程序将在控制台上输出一行。根据 logback 的默认配置策略,当未找到默认配置文件时,logback 将在根 Logger 中添加ConsoleAppender

20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1-世界您好。

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

示例:打印 Logger 状态(logback-examples/src/main/java/chapters/introduction/HelloWorld2.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应用程序将产生以下输出:

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是可被视为输出目标的类。 Appender 存在于许多不同的目的地,包括控制台,文件,Syslog,TCP 套接字,JMS 等。用户还可以根据自己的具体情况轻松创建自己的 Appender。

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

前面的例子很简单。在更大的应用程序中的实际logback不会有太大不同。记录语句的一般模式不会改变。只有配置过程会有所不同。但是,您可能需要根据需要自定义或配置logback。后续章节将介绍 Logback 配置。

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

以下是三个步骤的列表,以便启用您的应用程序logback。

  • 配置logback环境。您可以通过几种或多或少的复杂方法来执行此操作。稍后再详细介绍。

  • 在您希望执行日志记录的每个类中,通过调用org.slf4j.LoggerFactory类的getLogger()方法并传递当前类名或类本身作为参数来检索Logger实例。

  • 通过调用其记录方法(即 debug(),info(),warn()和 error()方法)使用此 Logger 实例。这将在配置的附加程序上生成日志记录输出。

Building logback

作为其构建工具,logback 依赖于广泛使用的开源构建工具Maven

一旦安装了 Maven,构建 logback 项目(包括其所有模块)应该与从未归档 logback 分发目录中发出mvn install命令一样容易。 Maven 将自动下载所需的外部库。

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

有关在 IDE 下构建logback的信息,请参见Classpath 设置页面上的相关部分