第一章 logback简介

logback是什么

logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性。

天才第一步

要求

logback-classic 模块需要在 classpath 添加 slf4j-api.jar、logback-core.jar 以及 logback-classic.jar。

Example 1.1: Basic template for logging

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 中,它导入了两个类 LoggerLoggerFactory,这两个类定义在 SLF4J API 中,在 org.slf4j 包中。

在这个例子中,main() 包含了一个 DEBUG 级别的日志语句,输出信息为 “hello world”

运行 HelloWord1 将会在控制台看到一行日志。由于 logback 默认的配置策略:当没有默认的配置时,logback 将会在 root logger 中新增一个 ConsoleAppender

11:58:56.662 [main] DEBUG chapters.introduction.HelloWorld1 - hello world

Logback 通过一个内部的状态系统来报告它本身的状态信息。发生在 logback 生命周期中的事件可以通过 StatusManager 来获取。

Example: Printing Logger Status

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");
        
        // 打印内部的状态
        LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
        StatusPrinter.print(lc);
    }
}

运行结果如下:

12:23:49.324 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world
12:23:49,258 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:23:49,258 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:23:49,258 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:23:49,262 |-INFO in ch.qos.logback.classic.BasicConfigurator@2e5d6d97 - Setting up default configuration.

Logback 没有找到 logback-test.xmllogback.xml 配置文件,所以通过默认的配置策略-添加一个基本的 ConsoleAppender 来进行配置。Appender 类被看作为输出的目的地。Appenders 包括 console,files,Syslog,TCP Sockets,JMS 等等其它的日志输出目的地。用户可以根据自己的情况轻松的创建自己的 Appender。

如果发生了错误,logback 会自动在控制台打印自己内部的状态信息。

前面给的例子相对简单。实际上在大型的应用中,日志记录不会有太大的区别。日志记录的一般形式不会有改变,只是配置方式会有不同。可能你想要根据自己的需求来配置 logback,接下来的章节中将会介绍如何进行配置。

在上面的例子中,我们通过 StatusPrinter.print() 打印了 logback 自身的内部状态。logback 的内部状态对查找 logback 相关的问题非常的有用。

通过如下的三个步骤可以启用 logback 来记录日志:

  1. 配置 logback 环境。你可以通过简单或者复杂的方式来做,这个在后面会叙述到。
  2. 如果你想在每个类中打印日志,那么你需要将当前类的全称或者当前类当作参数,调用 org.slf4j.LoggerFactory.getLogger() 方法。
  3. 使用实例 logger 来调用不同的方法来打印日志。例:debug(),info(),warn(),error()。通过这些方法将会在配置好的 appender 中输出日志。

构建 logback

logback 使用 Maven 作为构建工具。

如果你安装了 Maven,你可以在 logback 的解压文件夹中运行 mvn install 来构建 logback 以及它所包含的模块。Maven 会自动下载 logback 需要的其它类库。

Logback 的压缩包包含了完整的源码,所以你可以根据自己的需要随意更改。而且只要你使用 LGPL 跟 EPL 协议,你甚至可以发布你更改后的版本。

上一篇:spring boot工程快速配置logback输出日志到文件【示例】


下一篇:Java 日志框架:slf4j 作用及其实现原理