当前位置:首页 >域名 >从Slf4j源码角度分析阿里开发手册日志规约 正文

从Slf4j源码角度分析阿里开发手册日志规约

来源:益强资讯优选   作者:域名   时间:2025-11-05 03:51:22

本文转载自微信公众号「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> 服务器托管

标签:

责任编辑:域名