第一章:简介

**士气的影响令人震惊。如果有一个正在运行的系统,甚至是一个简单的系统,热情就会跳跃。当新图形软件系统中的第一张图片出现在屏幕上时,即使只是矩形,也会加倍努力。在过程的每个阶段,始终都有一个工作系统。我发现团队可以在四个月内 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。

示例 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。

Building logback

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

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

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

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

首页