http://www.blogjava.net/dreamstone/archive/2007/07/09/128993.html

一、介绍:
简单日记门面(simple logging Facade for java)SLF4J是为各种loging APIs提供一个简单统一的
接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以
选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现
来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。在SLF4J发行版本中包含了几个
jar包,如slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-log4j13.jar,
slf4j-jdk14.jar and slf4j-jcl.jar通过这些jar文件可以使编译期与具体的实现脱离。或者说可以
灵活的切换
二、官方站点
官方的网站:http://www.slf4j.org/manual.html
三、为何使用slf4j?
我们在开发过程中可能使用各种log,每个Log有不同的风格、布局,如果想灵活的切换那么slf4j是比较好的
选择。
四、如何使用slf4j
下边一段程序是经典的使用slf4j的方法.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Wombat {
    final Logger logger = LoggerFactory.getLogger(Wombat.class);
    Integer t;
    Integer oldT;
    public void setTemperature(Integer temperature) {
        oldT = t;
        t = temperature;
        logger.error("Temperature set to {}. Old temperature was {}.", t, oldT);
        if (temperature.intValue() > 50) {
            logger.info("Temperature has risen above 50 degrees.");
        }
    }
    public static void main(String[] args) {
        Wombat wombat = new Wombat();
        wombat.setTemperature(1);
        wombat.setTemperature(55);
    }
}

下边介绍一下运行上边程序的过程。
1,编译上边的程序,需要classpath中加入slf4j-api-1.4.1.jar文件
2,运行时,需要classpath中加上slf4j-simple-1.4.1.jar
运行得到结果:
----------------------------
0 [main] ERROR Wombat - Temperature set to 1. Old temperature was null.
0 [main] ERROR Wombat - Temperature set to 55. Old temperature was 1.
0 [main] INFO Wombat - Temperature has risen above 50 degrees.
这个是simple log风格,

3,切换:如果想切换到jdk14的log的风格,只需要把slf4j-simple-1.4.1.jar
从classpath中移除,同时classpath中加入slj4j-jdk14-1.4.1.jar
这时的运行结果:
---------------------------------------------------
2007-7-9 10:40:15 Wombat setTemperature
严重: Temperature set to 1. Old temperature was null.
2007-7-9 10:40:16 Wombat setTemperature
严重: Temperature set to 55. Old temperature was 1.
2007-7-9 10:40:16 Wombat setTemperature
信息: Temperature has risen above 50 degrees.
已经变成jdk14的log风格了。
4,再次切换到log4j
同样移除slj4j-jdk14-1.4.1.jar,加入slf4j-log4j12-1.4.1.jar,同时加入log4j-1.2.x.jar
加入log4j.properties。得到显示结果:
---------------------------------------
10:42:27,328 ERROR Wombat: Temperature set to 1. Old temperature was null.
10:42:27,328 ERROR Wombat: Temperature set to 55. Old temperature was 1.
10:42:27,328  INFO Wombat: Temperature has risen above 50 degrees.
在不同的风格中切换只需要在部署期切换类库就可以了,和开发时无关。

http://g.kehou.com/t1031674762.html

SLF4J的几种实际应用模式--SLF4J+Log4J 与 SLF4J+LogBack!

作者:谢周兵 2012-05-08 10:25 回复 楼主

SLF4J(Simple Logging Facade for Java) 是一个通用的日志框架,不能何以谓之 Facade(门面),所扮眼的角色相当于 Jakarta Commons Logging。就像 JCL 需要底层的日志实现,如 Log4J、java.util.logging、Simple Logger 等来完成具体的信息输出,事实上基本总是 JCL+Log4J 那么一个绝配。SLF4J 的原旨也是能支持多种下层日志框架实现,但最好的日志实现仍然是 Log4J,所以本篇讲述 SLF4J 的第一种用法 SLF4J+Log4J。

需要的配置文件和组件包,下面三个 jar 文件和一个 properties 文件都是要放在项目的 ClassPath 上。

1. slf4j-api-1.5.11.jar 
2. slf4j-log4j12-1.5.11.jar 
3. log4j-1.2.15.jar 
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)

log4j.properties

  1. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  2. log4j.appender.stdout.Target=System.out
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
  5. log4j.appender.db=org.apache.log4j.FileAppender
  6. log4j.appender.db.File=${s2sh.root}/WEB-INF/logs/ssh.log
  7. log4j.appender.db.Append=true
  8. log4j.appender.db.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

使用 SLF4J  的代码:

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. public class TestSlf4J {
  4. private static final Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
  5. public static void main(String[] args) {
  6. logger.info("Hello {}","SLF4J");
  7. }
  8. }

执行它,控制台输出:

  1. 2010-04-07 17:14:51,390 [com.unmi.TestSlf4j]-[INFO] Hello SLF4J

把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号):

把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号):

SLF4J+Log4j 组合 对比 JCL+Log4J 组合 
slf4j-api-1.5.11.jar 相当,定义高层 API commons-logging-1.1.jar 
slf4j-log4j12-1.5.11.jar 相当,左边是用绑定包,右边 
是用配置文件来指定日志实现 commons-logging.properties,内容为: 
org.apache.commons.logging.LogFactory= 
org.apache.commons.logging.impl.LogFactoryImpl 
或者 
org.apache.commons.logging.Log= 
org.apache.commons.logging.impl.Log4JLogger 
log4j-1.2.15.jar 一样 log4j-1.2.15.jar 
log4j.properties 一样,原来怎么配置现在也是 log4j.properties 
程序代码中: 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory;

Logger logger = LoggerFactory.getLogger(TestSlf4j.class); 
logger.info("Hello {}","SLF4J"); 左边侵入的是 SLF4J API,右边是被 JCL 的 API 污染了

SLF4J 支持参数化,而 JCL 不能 程序代码中: 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory;

Log log = LogFactory.getLog(TestJCL.class);

log.info("Hello JCL");

从上面的对比来看,SLF4j+Log4j 与 JCL+Log4J 的使用方式差不多,主要差异就在 SLF4J 用 jar 来告知用哪种日志实现,而 JCL 是通过配置文件来获得该选择哪个日志实现。

为 什么会兴起 SLF4J,看看我们原来哪一个框架中,大的如 SSH 三雄(Spring、Struts、Hibernate),还有 WAS 应用服务器,小的就不计其数以前用的通用日志框架都清一色的 Jakarta Commons Logging(JCL),日志实现会选用 Log4j,为何现在 Hibernate、Tapesty、DbUnit、Jetty V6 等纷纷变节,都采用了 SLF4J 了呢?SLF4J 与 JCL 相比,定然是有其可表之处。而其中 SLF4J 受类加载器的影响较小,不易产生内存溢出的问题,性能得到了改善,更主要是顺应了潮流的发展--可方便部署到 OSGI 环境中.

SLF4J+LogBack

前 面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。

Logback 分为三个模块:logback-core,logback-classic,logback-access。logback-core 是核心;logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的访问日志信息,如通过 http 的方式。

还得提一点,Logback 能更好的放到 OSGI 环境中。好了,简单绍完了 Logback,就来看看具体怎么用它。

需要的配置文件和组件包,下面三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath 上。

slf4j-api-1.5.11.jar 
logback-core-0.9.20.jar 
logback-classic-0.9.20.jar 
logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml)

Logback 先找 logback-test.xml,没有则找 logback.xml 文件,都找不到就使用 BasicConfigurator 基本配置,BasicConfigurator 就是相当于等会贴出的 logback.xml 文件内容的配置。这里我们用 logback.xml 配置文件,以前的 log4j.properties  文件可以用 PropertiesTranslator 转换成 logback.xml 文件内容。

下面是一个最简单的 logback.xml 文件内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder charset="GBK">
  5. <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  6. </encoder>
  7. </appender>
  8. <root level="DEBUG">
  9. <appender-ref ref="stdout" />
  10. </root>
  11. </configuration>

在 log4j.xml 能做的配置,logback.xml 中也能做到,而且还增强了诸如 <if><then><else>、<filter>、<sift> 等更强的控制,请参考 logback 的手册 http://logback.qos.ch/manual/index.html。

使用 Logback  的代码

  1. package com.unmi;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class TestLogback {
  5. private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);
  6. public static void main(String[] args) {
  7. logger.info("Hello {}","TestLogback");
  8. }
  9. }

可以看到与使用 SLF4J 的代码没有任何区别,因为本来用的通用日志框架就是 SLF4J,说到底,这里的 Logback 就相当于 SLF4J+Log4J 使用方式中的 Log4J 绑定和 Log4J 的功能。

执行上面的代码,输出:

21:38:43.031 [main] INFO  com.unmi.TestLogback - Hello TestLogback

还是和上次一样,这里就拿 SLF4J+Logback 和 SLF4J+Log4J 两种方式作下比较:

SLF4J 教程(自由在各种log中切换)相关推荐

  1. Unity3D教程:实现房产项目中的材质动态切换

    在许多典型的房产展示项目当中,经常需要动态地实现例如墙纸.地板等材质的更换以获得不同的展示效果,下面将通过一个简单的教程介绍实现这一功能的关键技术. 首先需要场景中创建一个简易的样品房,样品房里面有一 ...

  2. iPhone在通话中切换到FaceTime视频方法【图文教程】

    使用iPhone与他人进行通话时,如果对方同样使用iOS设备,则可以无需挂断电话直接在通话中切换到FaceTime视频聊天.如果需要在通话过程中向对方展示某些内容时,则可以借助这项功能完成. 请注意, ...

  3. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

  4. alert.log中的minact-scn: useg scan erroring out with error e:376警告

    早上,开发说昨晚一台服务器的undo好像有异常,早上上去一看,库停了,正常startup之后,随手crud了一把,都正常.去看alert.log日志,发现undo某个数据块访问报I/O读错误,如下: ...

  5. asp.net 报表页面模板_Stimulsoft ASP.NET MVC报表教程:在设计器中保存报表模板

    Stimulsoft Reports.Net最新版下载:https://www.evget.com/product/1071/download 本示例说明如何加载报表模板并在设计器中对其进行编辑. 首 ...

  6. mysql修改游戏元宝_页游源码【武斗乾坤】自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端...

    页游源码[武斗乾坤]自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端_站长下载 资源说明: 1.本资源为一键启动服务端,只需要安装好所需组件一键启动即可运行. 2.资源默认为单机架设,无 ...

  7. PS网页设计教程XV——如何在Photoshop中创建一个充满活力的作品集的网页设计

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  8. MTK modem log中判断SIM卡类型__2020.07.16

    在PS_Int log中搜索"sim_type",即可. SIM卡类型:SIM.MFF2 UICC(芯片SIM卡).eUICC(eSIM).SoftSIM 原文连接:https:/ ...

  9. linux 中切换用户指令,Linux中的Su命令(切换用户)

    su(替代或切换用户的缩写)实用程序允许您使用其他用户(默认情况下为root用户)的特权运行命令. 使用su是在当前登录会话中切换到管理帐户的最简单方法.当不允许root用户通过ssh或使用GUI显示 ...

最新文章

  1. 【MATLAB】数组运算
  2. Web GIS离线解决方案
  3. 【Android 文件管理】分区存储 ( 修改与删除图片文件 )
  4. Linux之nginx配置文件的分析整理
  5. 文件html怎么另存为wps,WPS文字中另存为功能详解(wps文字怎么保存到指定文件夹)...
  6. 利用C#实现分布式数据库查询
  7. 不要再被Python洗脑了,来看看这个吧......
  8. 【Golang】关于从切片中删除某个元素时会覆盖底层数组的说明
  9. 2015年江苏对口单招计算机试卷答案,2016江苏对口单招试卷 2015年江苏对口单招计算机试卷.doc...
  10. 大数据平台核心架构图鉴,建议收藏!
  11. 最强大脑记忆曲线(5)——主程序设计
  12. Delphi XE5应用开发支持的安卓设备
  13. python return break_Python基础:return和break的不同
  14. nginx 配置基于域名的虚拟主机
  15. 您只能在Photoshop CS4中做的3酷技巧
  16. Ameba 博客 词汇语法句型 20141101
  17. IDEA的配置文件乱码
  18. matlab中removeback的意思,remove是什么意思
  19. 配置 Windows Server 2008 R2 DNS 服务器
  20. T 检验 (T test)

热门文章

  1. RxSwift之UI控件UITableView扩展的使用
  2. 【数据结构与算法】之深入解析图的拓扑排序
  3. 对于窗口大小为n个滑动窗口,最多可以有( )帧已发送但没有确认。
  4. Linux操作系统中Anaconda的安装
  5. 13.2.3 视图层——视图函数
  6. Struts2 ognl表达式
  7. 【C++】Visual Studio 2019 三个版本比较
  8. 【Linux】一步一步学Linux——pwd命令(19)
  9. linux中cd命令及范例,15个Linux中的“cd”命令的实际示例
  10. mysql工_mysql