日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SLF4J 教程(自由在各种log中切换)

發布時間:2024/4/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SLF4J 教程(自由在各种log中切换) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

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

    使用 SLF4J? 的代碼:

    ?

  • import?org.slf4j.Logger;???
  • import?org.slf4j.LoggerFactory;???
  • ???
  • public?class?TestSlf4J?{???
  • ????private?static?final?Logger?logger?=?LoggerFactory.getLogger(TestSlf4j.class);???
  • ????public?static?void?main(String[]?args)?{???
  • ????????logger.info("Hello?{}","SLF4J");???
  • ????}???
  • }???
  • 執行它,控制臺輸出:

  • 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 文件內容

    ?

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

    在 log4j.xml 能做的配置,logback.xml 中也能做到,而且還增強了諸如 <if><then><else>、<filter>、<sift> 等更強的控制,請參考 logback 的手冊 http://logback.qos.ch/manual/index.html。?

    ?

    使用 Logback? 的代碼?

  • package?com.unmi;???
  • ???
  • import?org.slf4j.Logger;???
  • import?org.slf4j.LoggerFactory;???
  • ???
  • public?class?TestLogback?{???
  • ????private?static?final?Logger?logger?=?LoggerFactory.getLogger(TestLogback.class);???
  • ???
  • ???public?static?void?main(String[]?args)?{???
  • ????????logger.info("Hello?{}","TestLogback");???
  • ????}???
  • }???
  • ?

    可以看到與使用 SLF4J 的代碼沒有任何區別,因為本來用的通用日志框架就是 SLF4J,說到底,這里的 Logback 就相當于 SLF4J+Log4J 使用方式中的 Log4J 綁定和 Log4J 的功能。

    ?

    執行上面的代碼,輸出:?

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

    還是和上次一樣,這里就拿 SLF4J+Logback 和 SLF4J+Log4J 兩種方式作下比較:

    ?

    總結

    以上是生活随笔為你收集整理的SLF4J 教程(自由在各种log中切换)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。