您现在的位置是:亿华云 > 人工智能
从Slf4j源码角度分析阿里开发手册日志规约
亿华云2025-10-02 18:51:11【人工智能】3人已围观
简介本文转载自微信公众号「JAVA前线」,作者IT徐胖子 。转载本文请联系JAVA前线公众号。1 日志规约《阿里巴巴开发手册》日志规约章节有一条强制规定:应用中不可直接使用日志系统(Log4j、Logba
本文转载自微信公众号「JAVA前线」,从S册日作者IT徐胖子 。源约转载本文请联系JAVA前线公众号。码角
1 日志规约
《阿里巴巴开发手册》日志规约章节有一条强制规定:应用中不可直接使用日志系统(Log4j、度分Logback)API,发手而应依赖使用日志框架SLF4J中的志规API。使用门面模式的从S册日日志框架,有利于维护和各个类的源约日志处理方式统一:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(Abc.class);我们在使用日志框架过程中会发现,日志框架种类很多如slf4j、码角log4j、云服务器度分logback等等,发手在引入依赖时很容易混淆。志规那么这些框架是从S册日什么关系、应该如何使用就是源约本文需要回答的问题。
2 实例分析
在编写代码之前我们首先了解slf4j全称,码角我认为这会对理解这个框架有所帮助:
Simple Logging Facade for Java全称的含义就是Java简单日志门面,我们知道有一种设计模式被称为门面模式,源码下载其本质是化零为整,通过一个对象将散落在各处的功能整合在一起,这样外部只要通过与这个对象交互,由该对象选择具体实现细节。slf4j就是这样一个门面,应用程序只需要和slf4j进行交互,slf4j选择使用哪一个日志框架的具体实现。
2.1 slf4j-jdk14
(1) 引入依赖
<dependencies> <!-- slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- jdk14 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.7.30</version> </dependency> </dependencies>(2) 代码实例
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { private final static Logger logger = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { logger.info("info message"); System.out.println("LogTest"); logger.error("error message"); } }(3) 输出日志
LogTest 三月 14, 2021 11:39:14 上午 com.my.log.test.jdk14.LogTest main 信息: info message 三月 14, 2021 11:39:14 上午 com.my.log.test.jdk14.LogTest main 严重: error message2.2 slf4j-simple
(1) 引入依赖
<dependencies> <!-- slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.30</version> </dependency> </dependencies>(2) 代码实例
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { private final static Logger logger = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { logger.info("info message"); System.out.println("LogTest"); logger.error("error message"); } }(3) 输出日志
[main] INFO com.my.log.test.simple.LogTest - info message LogTest [main] ERROR com.my.log.test.simple.LogTest - error message2.3 logback
(1) 引入依赖
<dependencies> <!-- slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies>(2) 代码实例
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { private final static Logger logger = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { logger.info("info message"); System.out.println("LogTest"); logger.error("error message"); } }(3) 输出日志
11:40:53.406 [main] INFO com.my.log.test.logbck.LogTest - info message LogTest 11:40:53.410 [main] ERROR com.my.log.test.logbck.LogTest - error message2.4 slf4j-log4j12
(1) 引入依赖
<dependencies> <!-- slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency> </dependencies>(2) 代码实例
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { private final static Logger logger = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { logger.info("info message"); System.out.println("LogTest"); logger.error("error message"); } }(3) 日志配置
<log4j:configuration xmlns:log4j=http://jakarta.apache.org/log4j/> <appender name="myConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{ dd HH:mm:ss,SSS\} %-5p] [%t] %c{ 2\} - %m%n" /> </layout> <!--过滤器设置输出级别 --> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="debug" /> <param name="levelMax" value="error" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <root> <priority value="debug" /> <appender-ref ref="myConsoleAppender" /> </root> </log4j:configuration> 服务器租用很赞哦!(3516)