使用SLF4J和Logback23

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用SLF4J和Logback23

其实SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。


为什么有了Commons Logging和Log4j,又会蹦出来SLF4J和Logback?这是因为Java有着非常悠久的开源历史,不但OpenJDK本身是开源的,而且我们用到的第三方库,几乎全部都是开源的。开源生态丰富的一个特定就是,同一个功能,可以找到若干种互相竞争的开源库。


因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。


我们先来看看SLF4J对Commons Logging的接口有何改进。在Commons Logging中,我们要打印日志,有时候得这么写:


int score = 99;
p.setScore(score);
log.info("Set score " + score + " for Person " + p.getName() + " ok.");

拼字符串是一个非常麻烦的事情,所以SLF4J的日志接口改进成这样了:


int score = 99;
p.setScore(score);
logger.info("Set score {} for Person {} ok.", score, p.getName());


我们靠猜也能猜出来,SLF4J的日志接口传入的是一个带占位符的字符串,用后面的变量自动替换占位符,所以看起来更加自然。


如何使用SLF4J?它的接口实际上和Commons Logging几乎一模一样:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

class Main {
    final Logger logger = LoggerFactory.getLogger(getClass());
}

对比一下Commons Logging和SLF4J的接口:



不同之处就是Log变成了Logger,LogFactory变成了LoggerFactory。

image.png

使用SLF4J和Logback和前面讲到的使用Commons Logging加Log4j是类似的,先分别下载 SLF4J和 Logback,然后把以下jar包放到classpath下:

slf4j-api-1.7.x.jar

logback-classic-1.2.x.jar

logback-core-1.2.x.jar


然后使用SLF4J的Logger和LoggerFactory即可。和Log4j类似,我们仍然需要一个Logback的配置文件,把logback.xml放到classpath下,配置如下:


<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
  </appender>
  
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    <charset>utf-8</charset>
  </encoder>
  <file>log/output.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    <fileNamePattern>log/output.log.%i</fileNamePattern>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <MaxFileSize>1MB</MaxFileSize>
  </triggeringPolicy>
  </appender>
  
  <root level="INFO">
  <appender-ref ref="CONSOLE" />
  <appender-ref ref="FILE" />
  </root>
</configuration>



运行即可获得类似如下的输出:


13:15:25.328 [main] INFO  com.itranswarp.learnjava.Main - Start process...


从目前的趋势来看,越来越多的开源项目从Commons Logging加Log4j转向了SLF4J加Logback。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
缓存 Java API
logback配置
一、logback介绍 logback分成三个模块:logback-core,logback- classic,logback-access。 logback-core:提供了logBack的核心功能,是另外两个组件的基础; logback-classic:实现了SLF4J API; logback
706 0
|
1月前
|
JavaScript Java API
Java日志通关(二) - Slf4j+Logback 整合及排包
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第二篇。
|
2月前
|
Java API Maven
SLF4J
【7月更文挑战第3天】
46 6
|
4月前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
44 0
QGS
|
4月前
|
Java 数据库连接 Apache
Springboot日志框架logback与log4j2
Springboot日志框架logback与log4j2
QGS
107 0
|
监控 Java Shell
(二)Logback配置
Logback通过加载配置文件的方式来初始化配置,配置文件的加载顺序如下: 1)Logback首先会去类路径下找名为logback-test.xml的文件。 2)如果没有找到如上文件,会去类路径下找名为logback.groovy的文件。 3)如果没有找到如上文件,会去类路径下找名logback.xml的文件。
(二)Logback配置
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation
|
Java jenkins Linux
Logback使用总结
整理了下logback的常用点功能,并记录了一些在使用过程中的疑问,和问题的排错过程,防止自己再犯类似错误,也希望对路过的你有所帮助。
641 0
|
Java Shell
Logback 配置
logback 会在类路径下寻找名为 logback-test.xml 的文件。 如果没有找到,logback 会继续寻找名为 logback.groovy 的文件。 如果没有找到,logback 会继续寻找名为 logback.xml 的文件。 如果没有找到,将会通过 JDK 提供的 ServiceLoader 工具在类路径下寻找文件 META-INFO/services/ch.qos.logback.classic.spi.Configurator,该文件的内容为实现了 Configurator 接口的实现类的全限定类名。 如果以上都没有成功,logback 会通过 BasicConfig
456 0
|
XML Java API
SLF4J和Logback日志框架详解
本文讲述SLF4J和Logback日志框架。
SLF4J和Logback日志框架详解