作者:终南 <li.zhongnan@hotmail.com
>
SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
实
际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC
更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC
基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志
系统的配置来实现,因此可以在应用中灵活切换日志系统。
1、什么情况可以使用
如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。在另一
方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。假设你打算将你使用log4j的产品卖给要求使用JDK
1.4
Logging的用户时,面对成千上万的log4j调用的修改,相信这绝对不是一件轻松的事情。但是如果开始便使用SLF4J,那么这种转换将是非常轻松
的事情。
2、举例
(1)代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Wombat {
final Logger logger = LoggerFactory.getLogger(Wombat.class);
Integer t;
Integer oldT;
public void setTemperature(Integer temperature) {
oldT = t;
t = temperature;
Object[] objs = {new java.util.Date(), oldT, t};
logger.info("Today is {}, Temperature set to {}. Old temperature was {}.", objs);
if (temperature.intValue() > 50) {
logger.warn("Temperature({}) has risen above 50 degrees.", t);
}
}
public static void main(String[] args) {
Wombat wombat = new Wombat();
wombat.setTemperature(10);
wombat.setTemperature(60);
}
}
(2)使用SLF4J提供的simple log
将以下jar包加入到项目中,然后执行
slf4j-api-1.5.2.jar
slf4j-simple-1.5.2.jar
最终输出:
32 [main] INFO Wombat - Today is Wed Sep 10 14:50:57 CST 2008, Temperature set to null. Old temperature was 10.
32 [main] INFO Wombat - Today is Wed Sep 10 14:50:57 CST 2008, Temperature set to 10. Old temperature was 60.
32 [main] WARN Wombat - Temperature(60) has risen above 50 degrees.
(3)使用SLF4J提供的simple log
将以下jar包加入到项目中,然后执行
slf4j-api-1.5.2.jar
slf4j-jdk14-1.5.2.jar
最终输出:
2008-9-10 15:01:20 Wombat setTemperature
信息: Today is Wed Sep 10 15:01:20 CST 2008, Temperature set to null. Old temperature was 10.
2008-9-10 15:01:20 Wombat setTemperature
信息: Today is Wed Sep 10 15:01:20 CST 2008, Temperature set to 10. Old temperature was 60.
2008-9-10 15:01:20 Wombat setTemperature
警告: Temperature(60) has risen above 50 degrees.
(4)配置很简单吧
从以上事例可以看出,配置SLF4J使用那种日志系统是非常简单的一件事,只要将与你打算使用的日志系统对应的jar包
加入到项目中,SLF4J就会自动选择使用你加入的那种日志系统。这种方法被称之为静态绑定。当然,该日志系统的相关类库是不能少,例如,如果你打算使用
log4j,那么还需要log4j的类库,可能还有配置配置log4j.properties。
3、格式化日志
SLF4J还提供了格式化日志的功能,如事例中的语句:
logger.info("Today is {}, Temperature set to {}. Old temperature was {}.", objs);
4、日志系统绑定原理
在
应用中,通过LoggerFactory类的静态getLogger()获取logger。通过查看该类的代码可以看出,最终是通过
StaticLoggerBinder.SINGLETON.getLoggerFactory()方法获取LoggerFactory然后,在通过该具
体的LoggerFactory来获取logger的。类org.slf4j.impl.StaticLoggerBinder并不在slf4j-
api-1.5.2.jar包中,仔细查看每个与具体日志系统对应的jar包,就会发现,相应的jar包都有一个
org.slf4j.impl.StaticLoggerBinder的实现,不同的实现返回与该日志系统对应的LoggerFactory,因此就实现
了所谓的静态绑定,达到只要选取不同jar包就能简单灵活配置的目的。
5、参考
SLF4J官方网站:
http://www.slf4j.org/
原文地址
http://hi.baidu.com/li_zhongnan/blog/item/7d2617642b08edf6f636547d.html
分享到:
相关推荐
SLF4J(Simple Logging Facade for Java)是Java领域广泛应用的日志抽象层,它为各种日志框架,如Log4j、Java Util Logging、Logback等,提供了一个统一的接口。SLF4J的核心思想是让应用程序独立于具体日志实现,...
《基于SpringBoot的日志脱敏:Logback与Slf4j的实战应用》 在现代的软件开发中,日志系统是不可或缺的一部分,它为开发者提供了系统运行时的详细信息,帮助排查问题,优化性能。SpringBoot框架以其简洁的配置和强大...
SLF4J(Simple Logging Facade for Java)是Java日志框架的一个抽象层,它的主要目的是为各种日志实现提供一个统一的接口。这使得开发者能够在不修改代码的情况下,自由地选择日志实现,如Log4J、Logback或Java内置...
SLF4J(Simple Logging Facade for Java)是一个用于各种日志框架的简单抽象,例如java.util.logging、logback和Log4j。它的主要目的是提供一个可在运行时插入所需日志框架的简单接口,使应用程序的开发人员能够在...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它为各种日志框架提供了一个统一的接口,例如Log4j、Java Util Logging (JUL)、Logback等。这个设计使得开发者可以在不修改代码的情况下更换底层...
Log4j与SLF4J(Simple Logging Facade for Java)、Java Util Logging、Logback等日志框架有各自的优缺点,选择时应考虑项目需求、兼容性、性能等因素。 总之,《Log4j The Complete Manual》是学习和使用Log4j的...
本笔记将探讨Spring Boot中的日志管理,特别是如何使用Slf4j进行日志记录,并简要介绍门面模式在系统架构中的应用。 1. **Spring Boot 日志框架:** Spring Boot默认集成了多种日志框架,如Logback、Log4j2等,但...
4. **并行执行**:Hive通过MapReduce将复杂的查询操作分解为一系列的Map和Reduce任务,利用Hadoop集群的并行计算能力,提高了处理速度。 5. **优化器**:Hive包含一个查询优化器,可以根据数据分布和查询模式自动...
4. **usersNewsUpImg.asp**:这个文件可能负责用户上传图片的功能,对于文章管理系统而言,图片的上传和展示是提升内容吸引力的重要手段,能够增强文章的可读性和视觉效果。 5. **usersCenter.asp**:用户中心,是...
3. 集成SLF4J:虽然SLF4J本身是一个接口,但可以通过桥接器(如slf4j-jdk14.jar或slf4j-log4j12.jar)将SLF4J与Commons Logging连接起来。 五、优缺点分析 优点: - 提供了日志接口的统一,简化了代码。 - 动态...
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。 logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。 ...
Log4j、slf4j(by Plinio Freire) 和 ActiveMQ 收集将使其与其他程序轻松兼容。 介绍幻灯片 有什么区别。 RrRabbit 旨在可视化错误日志 易于集成到现有的 Java 应用程序上。 한국어 설명은 에 있습니다。 结构 Web ...
slf4j1.7.19 fastjson1.2.30 poi3.15 velocity1.7 alisms1.0 quartz2.2.3 mysql5.1.39 前端使用技术 Vue2.5.1 iview layer3.0.3 jquery2.2.4 bootstrap3.3.7 jqgrid5.1.1 ztreev3.5.26 froala_...
- log4j-x.x.x.jar:Apache的Log4j,一种广泛使用的日志记录工具,MyBatis可能通过SLF4J进行日志输出。 - mysql-connector-java-x.x.x.jar:MySQL数据库的JDBC驱动,用于连接MySQL数据库。 - ognl-x.x.x.jar:...
3. 功能相对有限:相比更强大的日志框架(如Log4j、SLF4J),Commons Logging的功能较为简单。 尽管有这些缺点,Commons Logging仍然是许多Java项目中的首选日志抽象层,特别是在那些希望保持日志实现灵活性的项目...
通过 Commons Logging,你可以方便地切换日志实现,如Log4j、java.util.logging (JUL) 或者 Simple Logging Facade for Java (SLF4J)。这样,如果你需要更换日志框架,只需要更改配置,而不需要修改代码。 在...
在搭建开发环境时,需要将 Hibernate 框架的库文件(包括所需的 JAR 包)添加到项目中,还需要 SLF4J 和 Log4J 的实现库,以及相应的 JDBC 驱动 JAR 包。 例如,创建一个简单的 Hibernate 应用,可以定义一个名为 `...
日志管理:SLF4J 1.7、Log4j JS框架:Vue 2.5.1,iview,layer 3.0.3,jquery 2.2.4,jqgrid 5.1.1 CSS框架:Twitter bootstrap3.3.7。 富文本:froala_editor1.2.2 开发环境 建议开发者使用以下环境,这样避免版本...
- **SLF4J(Simple Logging Facade for Java)**: 提供更简单和统一的接口,推荐与Logback配合使用。 - **java.util.logging**: Java内置的日志框架,简单但功能有限。 总的来说,`commons.logging-1.1.1.jar`是...
- **日志系统**:SLF4J+Log4j12。 - **其他工具类库**:Jackson(JSON处理)、Jedis(Redis客户端)、JavaMail(邮件发送)、JSTL(标签库)、Servlet API等。 ```xml <!-- 单元测试 --> <groupId>junit ...