如何将日志系统切换到 Logback?


如何将日志系统切换到 Logback?文章插图
如何将日志系统切换到 Logback?文章插图
作者 | 沉默王二
来源 | 沉默王二(id:cmower)
Log4j 介绍过了 , SLF4J 也介绍过了 , 那接下来 , 你懂的 , Logback 就要隆重地登场了 , 毕竟它哥仨有一个爹 , 那就是 Ceki Gulcu 。
就在昨天 , 老板听我说完 Logback 有多牛逼之后 , 彻底动心了 , 对我下了死命令 , “这么好的日志系统 , 你还不赶紧点 , 把它切换到咱的项目当中!”
我们项目之前用的 Log4j , 在我看来 , 已经足够用了 , 毕竟是小公司 , 性能上的要求没那么苛刻 。
如何将日志系统切换到 Logback?文章插图
Logback 强在哪
【如何将日志系统切换到 Logback?】1)非常自然地实现了 SLF4J , 不需要像 Log4j 和 JUL 那样加一个适配层 。
如何将日志系统切换到 Logback?文章插图
2)Spring Boot 的默认日志框架使用的是 Logback 。 一旦某款工具库成为了默认选项 , 那就说明这款工具已经超过了其他竞品 。
如何将日志系统切换到 Logback?文章插图
注意看下图(证据找到了 , 来自 Spring Boot 官网):
如何将日志系统切换到 Logback?文章插图
也可以通过源码的形式看得到:
如何将日志系统切换到 Logback?文章插图
3)支持自动重新加载配置文件 , 不需要另外创建扫描线程来监视 。
4)既然是巨佬的新作 , 那必然在性能上有了很大的提升 , 不然呢?
如何将日志系统切换到 Logback?文章插图
Logback 使用示例第一步 , 在 pom.xml 文件中添加 Logback 的依赖:

ch.qos.logback
logback-classic
1.2.3

Maven 会自动导入另外两个依赖:
如何将日志系统切换到 Logback?文章插图
logback-core 是 Logback 的核心 , logback-classic 是 SLF4J 的实现 。
第二步 , 来个最简单的测试用例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author 微信搜「沉默王二」 , 回复关键字 PDF
*/
public class Test {
static Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
logger.debug("logback");
}
}
Logger 和 LoggerFactory 都来自 SLF4J , 所以如果项目是从 Log4j + SLF4J 切换到 Logback 的话 , 此时的代码是零改动的 。
运行 Test 类 , 可以在控制台看到以下信息:
12:04:20.149 [main] DEBUG com.itwanger.Test - logback
在没有配置文件的情况下 , 一切都是默认的 , Logback 的日志信息会输出到控制台 。 可以通过 StatusPrinter 来打印 Logback 的内部信息:
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory;StatusPrinter.print(lc);
在 main 方法中添加以上代码后 , 再次运行 Test 类 , 可以在控制台看到以下信息:
12:59:22.314 [main] DEBUG com.itwanger.Test - logback
12:59:22,261 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:59:22,262 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:59:22,262 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:59:22,268 |-INFO in ch.qos.logback.classic.BasicConfigurato
也就是说 , Logback 会在 classpath 路径下先寻找 logback-test.xml 文件 , 没有找到的话 , 寻找 logback.groovy 文件 , 还没有的话 , 寻找 logback.xml 文件 , 都找不到的话 , 就输出到控制台 。
一般来说 , 我们会在本地环境中配置 logback-test.xml , 在生产环境下配置 logback.xml 。
**第三步 , **在 resource 目录下增加 logback-test.xml 文件 , 内容如下所示:


%d{HH:mm:ss.SSS} %relative [%thread] %-5level %logger{36} - %msg%n




Logback 的配置文件非常灵活 , 最基本的结构为 元素 , 包含 0 或多个元素 , 其后跟 0 或多个 元素 , 其后再跟最多只能存在一个的 元素 。
如何将日志系统切换到 Logback?文章插图