天天看点

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

目录

1.1 slf4j概述

1.2 slf4j环境搭建

1.2.1 slf4j项目导入   

1.2.2 slf4j源码目录构成

1.1 slf4j概述

       slf4j全称为Simple Logging Facade for Java,是为java设计的简单日志门面,使用门面模式可以让开发者在部署的时候把自己想要的日志框架以插件形式加入到项目中。刘欣有一篇有趣的文章《一个著名的日志系统是怎么设计出来的?》生动描述了java语言下日志框架发展过程。

1.2 slf4j环境搭建

1.2.1 slf4j项目导入   

       目前slf4j源码托管于github,我们可以从github上slf4j项目地址拉取代码,拉取后的slf4j源码目录结构如下图所示:

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

                                                                                       图1-1 slf4j源码目录结构

源码文件中包含了pom.xml构建文件,slf4j使用maven进行构建,所以需要先安装maven,安装完maven后,可以使用eclipse将slf4j工程导入,我目前使用eclipse Neon 4.6.3,已经内置安装了Maven eclipse插件,如比较老的eclipse没有安装Maven插件,可能需要从网上查找安装相关eclipse插件。

      在eclipse中导入已存在的Maven工程,选择从github拉取的本地源码目录,即可将slf4j导入到eclispe:

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

                                                                                 图1-2 导入slf4j Maven工程

        刚导入eclipse的Maven工程可能不是按层次展示的,这样对源码关系展示不是很清晰,我们调整一下项目展示,在项目视图中,下拉箭头,项目展示,将项目调整为按层次展示:

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

                                                                              图1-3 按层次展示slf4j项目代码

       导入项目到eclipse后,即可使用Maven进行项目构建,右击slf4j-parent项目,选择Maven->Update  project...更新Maven项目:

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

                                                                         图1-4 更新Maven项目

更新Maven项目会根据项目中的Maven pom.xml文件的依赖,到Maven仓库下载必要的构建依赖jar包等完成项目依赖设置。如果勾选自动构建项目,还会自动触发eclipse构建项目完成构建,否则需要自己手动清理项目完成构建:

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

                                                                              图1-5 完成slf4j项目构建

(tips:构建完成后,可能有pom.xml文件提示parent标签的maven chain tools依赖有问题,项目标红,此时可以将鼠标放到报错的pom文件标签元素上,在自动弹出的提示中,选择“Mark goal run as ignored in Eclipse build in Eclipse preferences”)

        测试项目是否构建成功,可以使用slf4j-api项目下的test工程,NoBindingTest.java文件,使用JUint运行(tips:slfj4使用JUnit编写测试案例,如果eclipse未安装JUnit插件,需要先进行安装。右键文件->Run as->JUnit Test),运行结果如下:

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
           

 这是因为slf4j并未绑定任何日志框架,所以使用默认处理(不做任何日志处理)。

        为了避免我们自己测试的代码污染了slf4j源码,我们在项目中单独创建一个sljf4j-test的java项目,在这个项目中引用slf4j的项目进行测试代码编写:

一、slf4j概述及环境搭建1.1 slf4j概述1.2 slf4j环境搭建

                                                            图1-6 新增测试项目增加对slj4j项目依赖

在测试项目中增加如下测试类代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestSlf4j {
	  public static void main(String[] args) {
		    Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
		    logger.info("Hello World");
		  }
}
           

运行后结果与上面直接运行NoBindingTest.java的JUnit测试案例结果是一样的,因为项目中并未绑定相关日志框架。如果增加项目依赖,将slf4j-simple也加入依赖,再运行TestSlf4j,结果如下:

[main] INFO TestSlf4j - Hello World
           

1.2.2 slf4j源码目录构成

slf4j源码目录结构

目录 说明
src Maven assembly打包pom文件中的jar包的打包说明文件
slf4j-site slf4j网站源码
slf4j-simple slf4j项目实现的一个简单外部扩展日志框架,仅仅简单地把所有消息输出到System.err
slf4j-nop slf4j项目中实现的不做任何操作(no operation)日志框架
slf4j-migrator slf4j迁移工具,可将项目中使用Jakarta Commons logging、log4j、JUL自动迁移到slf4j
slf4j-log4j12 slf4j实现的apache log4j日志框架接口适配层(log4j接口与slf4j定义的接口不一致,所以要适配)
slf4j-jdk14 slf4j实现的java原生logging日志框架接口适配层(java logging接口与slf4j定义的接口不一致,所以要适配)
slf4j-ext slf4j扩展,包括性能分析器、MDCStrLookup 扩展日志、事件日志等
slf4j-api slf4j核心api,统一了日志记录接口
osgi-over-slf4j osgi日志桥接器
log4j-over-slf4j log4j日志桥接器
jul-to-slf4j java util logging日志桥接器
jcl-over-slf4j java common logging日志桥接器
integration 集合了一些以编译的slf4j api版本相关jar及测试案例