logback日志框架简介与HelloWorld
一、logback日志框架简介
1、logback的定位
logback作为log4j的接替者,具有通用性很强的架构,以适配各种场景下的使用。
2、logback的组成模块
logback被分为了3个模块:logback-core、logback-classic、logback-access。
(1) logback-core
- 为其它两个模块做准备工作;
- 你也可以轻易地在logback-core的基础上建立自己的模块;
(2) logback-classic
- 可以理解为log4j的主要升级版;
- 原生地实现了log4j的API,因此你可以轻易地在logback日志框架和其它的日志框架(如log4j、java.util.logging[JUL])之间进行切换。
- 后续我们只用logback-classic,说logback,指的就是logback-classic。
(3) logback-access
- 集成了Servlet容器(如Tomcat、Jetty),从而提供了HTTP可访问的日志功能。
二、logback的HelloWorld工程
1、三步骤
- Step1:
- 配置logback环境。
- Step2:
- 在你想要打印日志的类中,用LoggerFactory的静态方法getLogger(……)来获取出一个Logger实例,getLogger方法的入参用这个类的String全名或者这个类的字节码对象都可以。
- Step3:
- 在方法中使用上一步获取到的Logger实例调用debug()/info()/warn()/error()方法来将日志打印至输出目的地。
2、HelloWorld
(1)举例
首先,为自己的工程添加logback-classic的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>red.var.learning</groupId>
<artifactId>logback-learning</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
查看依赖树可以发现logback-classic.jar还依赖logback-core.jar和slf4j-api.jar:
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ logback-learning ---
[INFO] red.var.learning:logback-learning:jar:0.0.1-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] \- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] ------------------------------------------------------------------------
然后,在需要打印日志的类中获取Logger实例并使用其方法打印日志至输出目的地:
package red.var.logback.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("red.var.logback.test.HelloWorld");
logger.debug("Hi,Logback!");
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(loggerContext);
}
}
执行main方法,可见控制台打印出如下日志:
09:15:36.511 [main] DEBUG red.var.logback.test.HelloWorld - Hi,Logback!
09:15:36,464 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
09:15:36,464 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
09:15:36,464 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
09:15:36,464 |-INFO in ch.qos.logback.classic.BasicConfigurator@179d3b25 - Setting up default configuration.
(2)小结
- ①简单使用logback打印日志的时候,只感知到使用slf4j。
- ②使用StatusPrinter的print方法可以打印出logback内部状态信息,这个使用方法很重要,在碰到与logback有关的问题时,打印logback内部状态信息会很利于问题的诊断。例子中可以看到,在打印出“Hi,Logback!”之前,logback尝试去寻找配置文件,但是没找到于是最后采用了自己的BasicConfigurator来作为默认配置。