目录
[1、引入相关依赖或者 jar 包](#1、引入相关依赖或者 jar 包)
Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快,占用空间更小,而且比其他日志框架提供了更多了功能。
//日志框架出现的历史顺序:log4j --> JUL--> JCL--> slf4j --> logback--> log4j2
1、引入相关依赖或者 jar 包
Logback-classic 模块除了logback-classic.jar 之外,要求类路径上必须存在slf4j-api.jar 和 logback-core.jar 。//需要多少jar包是官方文档的明确要求,其中slf4j是日志门面,logback是日志门面的一种具体实现
(1)方式一:使用 jar 包方式
为了使用 Logback 日志,需要将以下 jar 添加到类路径中:
For logback 1.3 targeting Java EE (javax.* namespace) //1.3版本-Java EE
logback-core-1.3.13.jar
logback-classic-1.3.13.jar
slf4j-api-2.0.7.jar
For logback 1.4.x targeting Jakarta EE (jakarta.* namespace) //1.4版本-Jakarta EE
logback-core-1.4.13.jar
logback-classic-1.4.13.jar
slf4j-api-2.0.7.jar
logback-*.jar 文件可以从Maven 中心的*ch.qos.logback groupId* 下下载,而slf4j-api-2.0.7.jar 可以从*org.slf4j groupId*下载。
++Java EE 和 Jakarta EE:++
2017 年发生了一件重大的事,Oracle 决定将 Java EE 捐赠给 Eclipse 基金会(但 Java 仍然属于 Oracle)。
因为 Oracle 拥有 "Java" 商标权。按照法律要求,Eclipse 基金会需要对 Java EE 进行更名。经过社区的投票选择,Java EE 被更名为 Jakarta EE。
虽然 Oracle 开源了 Java 源代码,但却并未开源所有的文档。同样令人奇怪的是 Eclipse 基金会还不能使用 javax 的命名空间来创建新的 Java 包,但是可以在现有包的下面创建新的类和子类,这就是 jakarta.* namespace 的来源 //感觉挺那个啥啥的
(2)方式二:使用 maven 方式
要在Maven 项目中使用logback-classic ,只需要在项目的pom.xml文件中声明以下依赖项即可。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.8</version>
</dependency>
++但是,logback 不是需要三个包吗?怎么只有一个依赖呢?++
这是因为,除了logback-classic.jar 之外,上述声明还会根据 Maven 的传递性规则自动将 slf4j-api.jar 和 logback-core.jar 拉入你的项目中。
引入相关依赖后(方式一和方式二任意选一种),就可以使用 Logback 日志了,你没有看错,就是这么简单,just do it!!!
2、使用logback日志
现在让我们开始尝试使用 logback:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Example {
private static final Logger logger
= LoggerFactory.getLogger("self4.Example"); //or Example.class
public static void main(String[] args) {
logger.info("Example log from {}", Example.class.getSimpleName());
}
}
输出内容://使用 IntelliJ IDEA,JDK:17.0.9 进行项目构建
11:08:39.641 [main] INFO self4.Example -- Example log from Example
至此,logback 框架就被成功引入到项目中了,这确实是一件非常简单的事,对不对?
**注意:**从版本 1.3.x 开始,logback 需要 Java 9 来构建。但是,它可以在 Java 8 或更高版本上运行。
不知道你有没有发现,上面的示例没有引用到任何的 logback 的类。Example 类中的 Logger 和 LoggerFactor 都是 slf4j 包中的 API。这是因为在大多数情况下,就日志记录而言,你的类只需要引入 slf4j 的类,所以绝大多数的类将使用 slf4j 的API,并且不会注意到 logback 的存在 。//这就好比接口和实现类的情况,在java项目中,我们一般引入的是接口类的对象类型而不是其具体实现类的对象类型
Example 应用程序非常简单,并没有配置任何的配置文件,当 logback 没有找到配置文件时就会执行默认配置策略,logback 会向根记录器(Logger )添加一个默认的 ConsoleAppender。//与Springboot 的思想不谋而合
下边,我们就来引入一个 logback 的配置文件,显示的声明一些配置信息。
3、引入logback配置文件
logback 的配置文件名称为logback.xml ,该文件放置在项目的资源根目录(resources)下即可,简单的配置内容如下:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
启动 Example 应用程序,输出内容如下:
13:08:14.919 [main] INFO self4.Example - Example log from Example
logback.xml 配置文件的内容是使用 logback 框架非常重要的一部分,这部分的详细内容,将在后续详细介绍。
4、打印logback内部状态信息
Logback 可以使用内置状态系统跟踪其内部状态的信息。可以通过名为 StatusManager 的组件来访问 logback 生命周期内发生的重要事件。
现在,让我们通过调用 StatusPrinter 类的静态 print() 方法来指示 logback 打印其内部状态。
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Example {
private static final Logger logger
= LoggerFactory.getLogger("self4.Example");//or Example.class
public static void main(String[] args) {
logger.info("Example log from {}", Example.class.getSimpleName());
//打印内部状态信息
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
}
输出信息如下所示:
13:14:37.935 [main] INFO self4.Example - Example log from Example
13:14:37,619 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.14 #1、日志版本信息
13:14:37,651 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] #2、寻找logback-test.xml配置文件
13:14:37,652 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/IDEA_WORKSPACE/demo/demo/target/classes/logback.xml] #3、找到logback.xml配置文件
13:14:37,860 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT] #4、appender附加器信息
13:14:37,861 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] #5、附加器类型
13:14:37,877 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property #6、PatternLayoutEncoder类型
13:14:37,930 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to DEBUG #7、日志级别
13:14:37,930 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT] #8、添加附加器
13:14:37,931 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@11e21d0e - End of configuration. #9、结束配置
13:14:37,932 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1dd02175 - Registering current configuration as safe fallback point
在上面的示例中,指示 logback 通过调用 StatusPrinter.print() 方法来打印其内部状态。 Logback 的内部状态信息对于诊断与 logback 相关的问题非常有用。
以下是在应用程序中启用日志记录所需的三个步骤://框架使用的基本思路
- 配置 logback 环境,可以通过 logback.xml 文件进行配置。
- 获取 Logger 实例,通过调用 org.slf4j.LoggerFactory 类的 getLogger() 方法(传递当前类名或类本身作为参数)来获取 Logger 实例。
- 使用 Logger 实例,通过调用 Logger 的打印方法(即 debug()、info()、warn() 和 error() 方法)来使用此记录器实例。这将在配置的附加程序上生成日志输出。
有关日志框架的其他信息,这篇文章写得也非常不错,可以进行参考。
logback 的官方文档地址,点击这里。
非常不错的 baeldung 教程,点击这里。
至此,全文结束。