`
futeng
  • 浏览: 260626 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

SLF4J介绍以及依赖等问题解决

    博客分类:
  • Java
阅读更多

预览

  1. 介绍SLF4J 日志接口框架
  2. 如何解决日志冲突等常见问题

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。

为什么不直接使用日志框架

  1. 使用SLF4J可将解绑具体的日志框架,方便更好。
  2. SLF4J提供的占位符等功能非常实用。
  3. 其实还有很多优点,大家自行搜索 :) 。

使用

引入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

  • 大小: 23.9 KB
3
0
分享到:
评论
1 楼 andy20160606 2016-11-01  
不错。建议用看图的方式,点一下之后以为没反应,其实已经去除依赖了,再次看到的人看到我的留言希望对你们有帮助!

相关推荐

    slf4j1.7.7完整依赖.zip

    log4j1.2.17完整依赖,与slf4j版本匹配,解决log4j与slf4j小版本不一致的问题。包含:log4j1.2.17.jar,slf4j-api-1.7.7.jar,slf4j-log4j12-1.7.7.jar

    jcl-over-slf4j-1.7.25.jar 由于下载次数较多,所需积分上去了,我已下调

    跟 JCL 一样,SLF4J 也是只提供 log 接口,具体的实现是在打包应用程序时所放入的绑定器(名字为 slf4j-XXX-version.jar)来决定,XXX 可以是 log4j12, jdk14, jcl, nop 等,他们实现了跟具体日志工具(比如 log4j)...

    log4s:用于Scala的高性能SLF4J包装器

    SLF4J库解决了在JVM上不同框架上抽象日志记录的问题,诸如Logback和Log4j 2之类的框架既灵活又强大。 在JVM上,Log4仅位于这些现有子系统的顶部。 Scala的宏和值类使Log4能够提供惯用的Scala外观,该外观不会增加...

    Hibernate.rar

    hibernate-release-5.0.7.Final Hibernate依赖库: antlr-2.7.7.jar dom4j-1.6.1.jar geronimo-jta_1.1_spec-1.1.1.jar hibernate-commons-annotations-5.0.1.Final.jar ...slf4j-log4j12-1.7.2.jar

    BoneCPjar包.zip

    bonecp是一个轻型、高效的连接池解决方案,除了自身bonecp.jar外,还需要依赖一些外部jar包才能正常运行,这些jar包是: bonecp-0.7.0.jar mysql-connector-java-5.1.13-bin.jar slf4j-log4j12-1.6.1.jar slf4...

    Java日志框架

    眼下java应用日志收集都是採用日志框架(slf4j、apachecommonslogging)+日志系统(log4j、log4j2、LogBack、JUL等)的方式。日志框架:提供日志调用的接口,实际的日志输出托付给日志系统实现。JCL...

    sofa-common-tools:Sofa-common-tools是一个向其他SOFA库提供一些实用程序功能的库

    背景在日常开发中,Java日志记录通常包括选择日志外观(例如JCL和SLF4j)和日志实现(例如Log4j2和logback)。 假设您正在开发使用JAR的应用程序,该JAR利用log4j2进行日志记录。 在这种情况下,您不能选择log4j2...

    Spring 3 Reference中文

    1.3.2.2 使用SLF4J 17 1.3.2.3 使用Log4J .. 19 第二部分 Spring 3 的新特性.. 21 第2 章 Spring 3.0 的新特性和增强 21 2.1 Java 5.. 21 2.2 改进的文档. 21 2.3 新的文章和教程. 21...

    支持多数据库的ORM框架ef-orm.zip

    间接依赖仅有commons-lang, slf4j等7个通用库,作为一个ORM框架,对第三方依赖极小。简单直接的API 框架的API设计直接面向数据库操作,不绕弯子,开发者只需要数据库基本知识,不必学习大量新的操作概念即可使用API...

    java开源包4

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包10

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包8

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包7

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包9

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics