预览
- 介绍SLF4J 日志接口框架
- 如何解决日志冲突等常见问题
SLF4J
The Simple Logging Facade for Java (SLF4J) )serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.
上面是SLF4J官网的首段描述,请注意关键字Facade(表面、外观),中文没有一个非常形象的对应词可翻译,导致理解起来非常别扭。句子紧接着又增加了一个描述词abstracting来辅助描述下,估计也有这方面的考虑 :) 。
其实SLF4J只是定义了日志操作的相关接口,而不是具体的日志实现方案,这点跟JDBC非常类似。
为了方便比较,我们不妨看下JDBC的定义(来自百度百科):
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
简单理解,JDBC是使用Java API访问数据库的接口规范,具体的实现由不同数据库厂商提供。
SLF4J也是提供了操作日志的通用接口规范,只要你实现了这些规范接口,那么你就制作了一个符合SLF4J约定的日志框架。
而比较出名的开源日志框架有:java.util.logging, logback and log4j。
为什么不直接使用日志框架
- 使用SLF4J可将解绑具体的日志框架,方便更好。
- SLF4J提供的占位符等功能非常实用。
- 其实还有很多优点,大家自行搜索 :) 。
使用
引入slf4j-api
当前最新版本是1.7.7.
普通工程 将slf4j-api-1.7.7.jar放到你的类路径;
Maven工程 添加如下依赖:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency>
引入日志框架
常用的有 java.util.logging, logback, log4j等。<!--EndFragment-->
问题
slf4j-api
只定义了日志接口,如果没有放置具体的日志实现框架,那么日志程序自然无法使用。
注意:SLF4J会自动在类路径寻找日志实现框架。
那么未放置则会出现,找不到日志框架的问题,放多了则会出现提示找到了多个日志框架,哈哈。
未找到可绑定的日志框架
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details
很显然,你添加一个就行。
绑定了多个实现类
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/Workspace/Code/Maven.rep/org/slf4j/slf4j-simple/1.7.7/slf4j-simple-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/Workspace/Code/Maven.rep/org/slf4j/slf4j-log4j12/1.7.7/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
使用Eclipse-maven去除依赖问题的技巧
强大的maven管理工具,去除重复依赖问题非常简单。
POM文件中去除依赖
<dependencies> <dependency> <groupId> org.apache.cassandra</groupId> <artifactId>cassandra-all</artifactId> <version>0.8.1</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
使用 exclusion去除依赖。
Eclipse图形界面去除依赖
直接删除就OK了。
转载请标明作者和原文链接
ifuteng#gmail.com 2014/8/25
相关推荐
Java Slf4j,全称为Simple Logging Facade for Java,是一个为各种日志框架提供一个简单统一的接口,使得最终用户能够在...正确理解和使用Slf4j,能够帮助我们更好地管理和监控应用的运行状态,及时发现和解决问题。
log4j1.2.17完整依赖,与slf4j版本匹配,解决log4j与slf4j小版本不一致的问题。包含:log4j1.2.17.jar,slf4j-api-1.7.7.jar,slf4j-log4j12-1.7.7.jar
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它为各种日志框架提供了一个统一的API,如Log4j、Java Util Logging、Logback等。这样,开发者可以在不修改代码的情况下更换底层的日志实现。SLF...
在描述中提到的"lombok.extern.slf4j.Slf4j注解错误",这可能是指在使用Lombok和SLF4J时遇到的一些问题,例如缺少对应的依赖、配置错误或者版本不兼容。为了解决这些问题,通常需要检查以下几点: 1. 确保项目中已...
1. **API接口**:SLF4J提供了统一的日志API,定义了各种日志级别(TRACE, DEBUG, INFO, WARN, ERROR, OFF)以及相关的方法,如log()、debug()、info()等。 2. **绑定**:SLF4J API本身并不实现任何日志记录,它只是...
SLF4J的出现主要是为了解决Java日志API的碎片化问题,让应用的日志配置更加灵活。 标题中的"slf4j-api-1.7.7"指的是SLF4J API的1.7.7版本,它是SLF4J的核心组件,包含了SLF4J的日志API定义。这个库提供了日志记录的...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它提供了一个简单的API,允许开发者在应用程序中使用各种日志框架,如Log4j、Logback等,而无需直接依赖特定的日志实现。SLF4J 1.7是其的一个...
9. **不同版本的jar包**:可能包含不同版本的SLF4J及其绑定库,用于兼容不同版本的应用或解决版本冲突问题。 在使用这些jar包时,通常只需要slf4j-api.jar和一个绑定库(如slf4j-log4j12.jar)。其他jar包可以根据...
本文将详细介绍如何使用Slf4j集成Log4j2构建项目日志系统的完美解决方案。 背景: 随着项目的发展,对日志系统的需求也在不断增加。传统的日志系统基于Log4j,但是在高并发情况下,Log4j 1.x会出现死锁,导致CPU...
通过SLF4J,开发者可以在不修改代码的情况下,切换不同的日志实现,这对于多模块项目尤其有用,因为每个模块都可以依赖SLF4J,而项目的全局日志策略可以根据需求独立调整。 当使用slf4j-log4j12-1.5.x.jar时,需要...
3. **社区支持**:由于SLF4J的广泛使用,其社区活跃,遇到问题时容易找到解决方案。 4. **性能优化**:通过参数化日志,SLF4J能够避免在日志级别高于当前设置时进行不必要的字符串拼接。 总之,SLF4J作为Java日志...
Log4j和SLF4J(Simple Logging Facade for Java)是两个广泛使用的日志框架,它们各有优势并常被一起使用以提供更灵活的日志解决方案。本文将详细探讨如何通过SLF4J接口来使用Log4j进行日志记录,并展示一个测试代码...
在给定的压缩包"slf4j-1.6.0以及slf4j-1.7.7 包下载"中,包含了SLF4J的两个不同版本。SLF4J的1.6.0和1.7.7分别是该库在2011年和2013年的稳定版本,它们之间的主要差异可能包括性能优化、bug修复和对新Java版本的支持...
7. **文档和示例**:压缩包可能还包括用户手册、API文档以及演示如何使用SLF4J的示例代码,这对于学习和理解SLF4J的工作原理非常有帮助。 在实际应用中,SLF4J的使用通常包括以下步骤: 1. 引入slf4j-api.jar依赖...
SLF4J(Simple Logging Facade for Java)是Java中一个用于日志记录的抽象层,它提供了一种标准的日志记录接口,使得开发者可以选择不同的日志实现框架,如Log4j、Logback等。MongoDB则是一个流行的NoSQL数据库系统...
SLF4J(Simple Logging Facade for Java)是Java平台上的一种日志抽象层,它为各种日志框架,如Log4j、Java Util Logging、Logback等提供了一个统一的接口,使得开发者能够在运行时选择合适的日志实现。SLF4J的1.5.5...
这个“slf4j 1.6.1所有jar包”包含了SLF4J API和其他绑定实现,包括slf4j-api-1.6.1、slf4j-simple-1.6.1和slf4j-jdk14-1.6.1。这些组件协同工作,为Java应用程序提供灵活的日志记录能力。 **SLF4J API(slf4j-api-...
SLF4J(Simple Logging Facade for Java)是Java日志框架的一个接口层,它为各种日志实现提供了一个统一的API,如Log4j、java.util.logging、Logback等。选择SLF4J而非直接使用Log4J的原因主要在于以下几个方面: 1...
2. **导入依赖**:确保你的项目正确地包含了SLF4J API和对应的绑定器(如slf4j-log4j12),以及Log4j的实现库。 3. **避免版本冲突**:不同版本的SLF4J和Log4j可能不兼容,所以要确保所有相关库的版本协调一致。 4...