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

预览

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值