java 日志接口_Java日志框架slf4j API介绍及异常接口实现分析

SLF4J是一个简洁的Java日志接口,通过Facade设计模式提供统一的日志API,使得代码独立于具体日志系统。在不绑定具体日志实现的情况下,使用SLF4J可以方便地切换日志框架。本文介绍了SLF4J的绑定流程、日志API的使用方法,并通过示例展示了如何处理异常信息。
摘要由CSDN通过智能技术生成

目录

slf4j: 简洁的java日志统一接口(Simple Logging Facade for Java),顾名思义,就是一个使用Facade设计模式实现的面向java Logging框架的接口开源包。 其和java数据库连接工具包JDBC很像,在JDBC框架中,各个不同数据库连接器分别针对不同数据库系统来实现对应的连接操作,而普通程序员只需要使用统一的JDBC接口而不需要关注具体底层使用的数据库类型,或者针对不同的数据库系统写各种兼容代码。

Note: slf4j其实类似于适配器,但是这里不称呼适配器,是因为当底层log日志系统不支持slf4j扩展时,比如log4j,就需要在两者中间增加一个适配器层来完成slf4j调用相关日志系统的操作接口动作。例如,slf4j为log4j提高的slf4j-log412.jar类库,但是logback支持slf4J扩展,所以其不需适配层转换。

同样,slf4j 不参与具体的日志代码实现,它只是在代码编译的时候根据程序的配置来绑定具体的日志系统。这样,使用slf4j类库就可以让你的代码独立于任意一个特定的日志API。因此,如果编写一个对外开发的API活着一个同样的类库,那么为了不限制使用你类库的代码必须使用指定的日志系统,你应该使用slf4j。

相对于其他日志框架,slf4j日志类库的优点和推荐使用的缘由,可以参见 ImportNew 的译文【 为什么要使用SLF4J而不是Log4J 】

Facade模式,或者叫做外观模式,顾名思义就是封装各个底层子系统的提供的同一类功能接口,统一成一个更易操作使用的上层接口进而对外提供交互。有了这个上层封装的接口,接口调用方只需要调用这个接口,而不需要关于各个子系统的具体逻辑实现。

Facade设计模式的官方定义是:Facade模式定义了一个更高层的接口,使子系统更加容易使用。

关于Facade模式的实例,日常生活中很多这样子的例子。比如,5、1回家,可以有好几种方式:飞机、火车、长途汽车。在实际生活中,你回家的路线应该是:

1. 坐车去机场(火车站/长途汽车站);

2. 坐飞机(火车/长途汽车)到家乡;

3. 从家乡飞机场(火车站/长途汽车站)到家里。

一般来说,上面的流程是毫无问题的。但是,如果做成一个系统,你需要对外暴露3个步骤中得3个不同的接口,外界需要根据不同的交通方式选择不同的调用接口,这无疑加大了接口调研的复杂度,以及系统的复杂度。如下图所示:

7dca585ff06ac88f1a4fee29bccb8d03.png

使用Facade模式,封装各个子系统的实现,对外提供3个接口:

1. 坐车其站点;

2. 做主交通工具到家乡;

3. 从家乡的站点回家里。

因此,接口使用方不需要知道子系统具体是什么样的业务逻辑,其主要要在配置中,或者一开始指定交通工具,就可以让facade系统来完成下面的一系列操作。这样,除了让我们的系统对外暴露接口少了,最重要的是可以让第三方以最低的成本使用我们的接口。

3.1 slf4j 设计模式说明

为了说明slf4j采用的Facade模式,也就是如果只引入slf4j-api包,日志系统将无法正常使用。例如在pom.xml文件这只有:

org.slf4jslf4j-api1.7.5

import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author: ketao Date: 14-5-3 Time: 上午1:03 * @version: \$Id$ */ public class LogTest { private static final Logger logger = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args){ logger.info("Hello world"); logger.error("ERROR"); } }

执行上面的代码会出现提示:

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.

而如果我们引入logback日志系统,并且配置logback.xml日志配置文件:

ch.qos.logbacklogback-classic1.0.13

接下来执行上面的测试代码,则会打印日志信息:

[2014-05-03 01:27:11 [34mINFO [0;39m com.qunar.dubbo.LogTest.main(LogTest.java:17)] Hello world

[2014-05-03 01:27:11 [1;31mERROR[0;39m com.qunar.dubbo.LogTest.main(LogTest.java:18)] ERROR

3.2 slf4j 日志绑定流程

如3.1中的代码所示,首先调用LoggerFactory.getLogger的方法,这个方法会在编译的时候,绑定系统设置的真正的日志框架,如下代码所示:

/** * Return a logger named according to the name parameter using the statically * bound {@link ILoggerFactory} instance. * * @param name The name of the logger. * @return logger */ public static

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值