您现在的位置是:亿华云 > 人工智能

从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 message 

2.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 message 

2.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 message 

2.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)