1. 什么是logback
1.1. Logback由log4j的创始人设计的又一个开源日志组件。以十多年设计工业级记录系统的经验为基础, 所创建的logback比现有任何记录系统更快、占用资源更少。
1.2. Logback提供独特而实用的特性, 比如: Marker、参数化记录语句、条件化堆栈跟踪和强大的事件过滤功能。以上列出的仅仅是logbook实用特性的一小部分。
1.3. 对于自身的错误报告, logback依赖状态(Status)对象, 状态对象极大地简化了故障查找。
1.4. Logback-core附带了Joran, Joran是个强大的、通用的配置系统, 你可以在自己的项目里使用Joran以获得巨大的作用。
2. logback官网
2.1. 地址: https://logback.qos.ch/
3. 下载logback
3.1. 点击Download
3.2. 点击Maven central
3.3. 点击logback-core
3.4. 点击1.2.3
3.5. 点击下载logback-core-1.2.3.jar和它的源码包logback-core-1.2.3-sources.jar
3.6. 返回到logback目录, 点击logback-classic
3.7. 点击1.2.3
3.8. 点击下载logback-classic-1.2.3.jar和它的源码包logback-classic-1.2.3-sources.jar
3.9. 返回到logback目录, 点击logback-access
3.10. 点击1.2.3
3.11. 点击下载logback-access-1.2.3.jar和它的源码包logback-access-1.2.3-sources.jar
4. 入门例子
4.1. 使用logback要添加slf4j-api.jar、logback-core.jar和logback-classic.jar这三个jar包。logback-core是logback的核心模块。logback-classic依赖核心模块。
4.2. 新建一个名为LogbackRuMen的Java项目, 同时添加相关jar包
4.3. 编写HelloWorld.java
package com.zr.rm;
/**我们导入了slf4j的LoggerFactory和Logger类, 根本都没有导入logback, 就好像logback
* 不存在一样, 实际上底层却使用的是logback日志记录。
*/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
System.out.println(HelloWorld.class.getName());
logger.debug("logback入门");
}
}
4.4. 运行结果
4.5. 本例中, 调用LoggerFactory类的静态方法getLogger取得一个Logger实例, 将该实例赋值给变量logger。这个logger被命名为"com.rjbd.rm.HelloWorld"。
4.6. 调用这个logger的debug方法并传递参数"logback入门"。我们称之为main方法包含了一条消息是"logback入门"、级别是DEBUG的记录语句。
4.7. 本例中, 我们导入了slf4j的LoggerFactory和Logger类, 并没有引用任何logback的类。多数情况下, 只要涉及到记录, 你只需要引用SLF4J的类, 基本可以忽略logback的存在。
4.8. 运行后会在控制台输出下面的一行文字。得益于logback提供了默认配置策略, 当没有发现默认配置文件时, logback会为根(root)logger添加一个ConsoleAppender。
5. Logback内部状态例子
5.1. Logback可以通过内置的状态系统来报告其内部状态。通过StatusManager组件可以访问logback生命期内发生的重要事件。目前, 我们调用StatusPrinter类的print()方法来打印logback的内部状态。
5.2. 在LogbackRuMen的Java项目里编写LogbackStatus.java
package com.rjbd.rm;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
public class LogbackStatus {
public static void main(String[] args) {
// 日志上下文
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
// 打印Logback内部信息
StatusPrinter.print(context);
}
}
5.3. 运行结果
5.4. Logback说它没有找到配置文件logback-test.xml、logback.xml和logback.groovy, 于是用默认策略进行配置, 即用一个基本的ConsoleAppender。Appender类可被视为输出目的地的。
5.5. Appender包含许多不同类型的目的地, 包括控制台、文件、Syslog、TCP套接字和其他。用户可以很容易地自定义Appender。
5.6. 当发生错误时, logback将自动在控制台上打印其内部状态。
5.7. 之前的两个示例相当简单, 大型程序里真实记录志情况也不会有太大区别。记录系统的基本模式不会改变, 可能改变的是配置过程。也许你想按照自己的需要来定制或配置logback, 之后的章节会讨论配置logback。
5.8. 在本例中, 我们调用StatusPrinter.prin()方法来打印logback的内部状态。在诊断与logback相关的问题时, logback的内部状态信息会非常有用。
6. 在应程序里启用logback记录的三个必需步骤
6.1. 配置logback环境(添加相关jar包和配置logback.xml)。
6.2. 在每个需要执行记录的类里, 调用org.slf4j.LoggerFactory类的getLogger()方法获取一个Logger实例, 以当前类名或类本身作为参数。
6.3. 调用取得的logger实例的打印方法, 即debug()、info()、warn()和 error(), 把记录输出到配置里的各appender。