slf4j(simple logging facade for Java)是Java的简单的日志门面,它不是具体的日志解决方案,它只服务于各种各样slf4j-logo的日志系统。这里的slf4j-logo可以是log4j,可以是jdk的日志,可以是logback,还可以是slf4j-simple等等。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。这里其实用到了一种设计模式(Facade设计模式,门面设计模式)。如下图:

实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算用那个具体的日志系统。只需要在项目中加入定的slf4j-logo.jar包就可以。这个和spring的IOC思想有点像,想用哪个就用哪个,随意切换。

​使用slf4j这种记录日志的方式的特点很明显:1、如果我们需要记录的是底层类库或者组件这种东西,就可以不影响或强制要求用户选择哪种日志系统。2、如果我们用特定的日志系统写了代码,但是有一天要求换另一种日志系统,如果之前就用slf4j的api写的,那就很简单,但是如果用具体的一种方式写了以后,那在切换就很麻烦。

在代码中的使用示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Slf4jTest {
// 首先获得日志记录这个对象
static private Logger logger = LoggerFactory.getLogger(Slf4jTest.class); public static void main(String[] args) {
// 记录error信息
logger.error("[info message]");
// 记录info,还可以传入参数
logger.info("[info message]{},{},{},{}", "abc", false, 123,
new Slf4jTest());
// 记录deubg信息
logger.debug("[debug message]");
// 记录trace信息
logger.trace("[trace message]");
System.out.println("hello world");
}
}

具体使用哪种日志系统,这个可以随意切换,演示如下:

1、使用slf4j的simple日志系统:

在classpath中加入:slf4j-simple.jar,运行程序输入如下:

[main] ERROR com.swu.gusi.Slf4jTest - [info message]

[main] INFO com.swu.gusi.Slf4jTest - [info message]abc,false,123,com.swu.gusi.Slf4jTest@503f0b70

hello world

2、切换成jdk的日志系统:

在classpath中将slf4j-logo.jar换成slf4j-jdk.jar,运行程序如下:

九月 20, 2014 12:33:52 下午 com.swu.gusi.Slf4jTest main

严重: [info message]

九月 20, 2014 12:33:52 下午 com.swu.gusi.Slf4jTest main

信息: [info message]abc,false,123,com.swu.gusi.Slf4jTest@400da341

hello world

3、切换成log4j的日志系统:

​在classpath中将slf4j-logo.jar换成slf4j-log4j.jar,注意这在使用log4j的时候,需要自己配置log4j.properites文件或者log4j.xml。至于log4j的使用查阅其他文档。

http://dyygusi.iteye.com/blog/2118833

4、切换成其他的日志系统和上面相同。

5、如果classpath中有多种日志系统,会怎么样呢。会提示类似如下信息(最好别这样搞):

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/E:/Repository/org/slf4j/slf4j-simple/1.7.7/slf4j-simple-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/E:/Repository/org/slf4j/slf4j-jdk14/1.7.7/slf4j-jdk14-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]

[main] ERROR com.swu.gusi.Slf4jTest - [info message]

[main] INFO com.swu.gusi.Slf4jTest - [info message]abc,false,123,com.swu.gusi.Slf4jTest@10e80317

hello world

slf4j日志的使用的更多相关文章

  1. SpringBoot 整合 slf4j 日志打印

    划水时间,记录一下用到的相关slf4j 日志打印,如何实现配置输出.本地保存log日志文件... 我使用的是SpringBoot框架,slf4j 类库已经包含到了 SpringBoot 框架中,所有, ...

  2. SLF4J日志系统在项目导入时频现的问题

    一.概述 近期在导入一个已有的项目时,日志系统出现了一个问题.错误信息如下: SLF4J问题 SLF4J: Failed to load class "org.slf4j.impl.Stat ...

  3. SLF4J 日志门面

    目录 01.简单介绍 02.日志级别 03.入门案例 03.动态打印 04.异常打印 05.日志集成 06.集成 logback 07.集成 slf4j-nop 08.集成 log4j 09.集成 j ...

  4. slf4j日志系统

    slf4j:由外观模式实现,不是日志的解决方案,只是服务于各种各样的日志系统.可以让在应用部署的时候,选择合适的日志系统 slf4j + log4j : 配置日志文件:log4j.properties ...

  5. SLF4J日志门面

    SLF4J官网:http://www.slf4j.org/ SLF4J的作用通俗点讲,就是可以让我们的项目以最小的代价更换不同的日志系统.无需修改代码,只需要添加.删除相应的jar包和配置文件. 1. ...

  6. slf4j日志门面担当

    一.简介 slf4j主要是为了给Java日志访问提供一个标准.规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等.当然slf4j自己也提供了功能 ...

  7. slf4j日志用法

    在pom.xml中添加日志依赖 <!--slf4j--> <dependency> <groupId>org.slf4j</groupId> <a ...

  8. Log4j,Log4j2,logback,slf4j日志学习

    日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条 ...

  9. slf4j日志框架绑定机制

    一.环境搭建 我们以log4j为例,探寻slf4j与log4j的绑定过程. 1.Java类 public class Slf4jBind { public static void main(Strin ...

随机推荐

  1. 《MarkMark学习笔记学习笔记》html学习笔记

    iframe里有一个srcdoc属性,很有用! window.location.href=document.referrer//可以实现返回上一级页面并刷新 HTML5权威指南©®,比较老的书了,有些 ...

  2. JavaWeb环境搭建(作业八)

    1.JDK下载配置: (1)在官网下载jdk. (2)安装jdk.双击下载好的jdk,中间会选两次安装路径,一次是装jdk,一次是装jre.记住安装的路径. (3)配置环境变量. 1.在我的电脑右键属 ...

  3. Programming | 中/ 英文词频统计(MATLAB实现)

    一.英文词频统计 英文词频统计很简单,只需借助split断句,再统计即可. 完整MATLAB代码: function wordcount %思路:中文词频统计涉及到对"词语"的判断 ...

  4. EBS CAS SSO测试

    https://wiki.jasig.org/display/CAS/CASifying+Oracle+Portal https://wenku.baidu.com/view/5f110a85b9d5 ...

  5. NET Core微服务之路:再谈分布式系统中一致性问题分析

    前言 一致性:很多时候表现在IT系统中,通常在分布式系统中,必须(或最终)为多个节点的数据保持一致.世间万物,也有存在相同的特征或相似,比如儿时的双胞胎,一批工厂流水线的产品,当然,我们不去讨论非IT ...

  6. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)

    一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...

  7. Dynamic Programming | Set 3 (Longest Increasing Subsequence)

    在 Dynamic Programming | Set 1 (Overlapping Subproblems Property) 和 Dynamic Programming | Set 2 (Opti ...

  8. SDWebImage之SDWebImageCompat

    SDWebImageCompat 是SDWebImage 的配置文件,里面利用条件编译对Apple 的各个平台进行了兼容.从源码中可以看到SDWebImage 支持当前的MAC/iOS/TV/WATC ...

  9. JQuery Mobile - 动态修改select选择框的选中项

    <label for="day">选择天</label> <select name="day" id="day" ...

  10. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...