SLF4J介绍以及依赖等问题解决_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > SLF4J介绍以及依赖等问题解决

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

 2014/8/25 15:32:22  futeng  程序员俱乐部  我要评论(0)
  • 摘要:预览介绍SLF4J日志接口框架如何解决日志冲突等常见问题SLF4JTheSimpleLoggingFacadeforJava(SLF4J))servesasasimplefacadeorabstractionforvariousloggingframeworks(e.g.java.util.logging,logback,log4j)allowingtheendusertopluginthedesiredloggingframeworkatdeploymenttime
  • 标签:解决 问题解决 问题

预览

  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工程?添加如下依赖:

class="java"><dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>

?


引入日志框架

常用的有 java.util.logging, logback, log4j等。<!--EndFragment-->

?

问题

monospace;">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
  • 查看图片附件
发表评论
用户名: 匿名