DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          SLF4J 教程(自由在各種log中切換)

          一、介紹:
          簡單日記門面(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.
          在不同的風格中切換只需要在部署期切換類庫就可以了,和開發時無關。

          posted on 2007-07-09 10:47 dreamstone 閱讀(18226) 評論(9)  編輯  收藏 所屬分類: 利器其它開源框架

          評論

          # re: SLF4J 教程(自由在各種log中切換) 2007-07-09 12:40 Unmi

          commons-logging本來就是一個通用框架,其實也很方便的,沒見這個有什么優勢啊  回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換) 2007-07-09 12:46 dreamstone

          每個人、每個公司的習慣,傾向不同。有log4j ,jdk log ,NLOG4J等就說明大家有不同的需求,呵呵。優勢在于整合。

            回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換) 2007-07-09 13:31 lingo

          不懂,跟commons-logging比有什么有事嗎?雖然commons-logging是個橋接器,不過實際上一直在用的還是log4j  回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換) 2007-07-09 22:05 se

          不錯  回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換) 2007-07-10 14:19 Roy

          不同在這里
          logger.error("Temperature set to {}. Old temperature was {}.", t, oldT);

          這是其他Logger不支持的功能。
          以前我們都要這樣寫
          logger.error("Temperature set to "+t +". Old temperature was "+oldT+"." );

          也就是經常說為什么要加上log.isDebugalbe()判斷的原因之一,這樣做會減少字段串的合并,理解上減少JVM垃圾  回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換) 2007-09-24 15:14 hanfeng

          SLF4J的作者就是Log4j的作者,他正在開發logback來代替log4j,logback有更高的性能。logback支持上面提到的
          logger.error("Temperature set to {}. Old temperature was {}.", t, oldT);
          commons-logging沒有提供類似的接口,SLF4J提供了,而且解決了classloader的問題。  回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換) 2011-04-11 20:07 Jacklondon Chen

          @hanfeng
          我不覺得 slf4j 解決了 classloader 問題。
          commons-logging 也號稱 解決了 classloader 問題。但是當 J2EE server 也用commons-logging 并且版本比你的應用中所用commons-logging 版本老時,問題就出現了。
          現在 slf4j 沒有這個問題,是因為 J2EE server 不用 slf4j. 而 classloader 問題的最終解決,需要 JDK、J2EE server 兩方面的廠商合作出一個新的解決辦法,才能搞定問題?,F在還早呢。
          ----歡迎大家試用我們的單點登錄系統 http://zhegui.biz
            回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換)[未登錄] 2014-04-18 13:27 Robot

          common-logging通過動態查找的機制,在程序運行時自動找出真正使用的日志庫。由于它使用了ClassLoader尋找和載入底層的日志庫, 導致了象OSGI這樣的框架無法正常工作,因為OSGI的不同的插件使用自己的ClassLoader。 OSGI的這種機制保證了插件互相獨立,然而卻使Apache Common-Logging無法工作。

          slf4j在編譯時靜態綁定真正的Log庫,因此可以再OSGI中使用。另外,SLF4J 支持參數化的log字符串,避免了之前為了減少字符串拼接的性能損耗而不得不寫的if(logger.isDebugEnable()),現在你可以直接寫:logger.debug(“current user is: {}”, user)。拼裝消息被推遲到了它能夠確定是不是要顯示這條消息的時候,但是獲取參數的代價并沒有幸免。  回復  更多評論   

          # re: SLF4J 教程(自由在各種log中切換)[未登錄] 2016-03-22 17:24 ddd

          ewrwrw  回復  更多評論   

          主站蜘蛛池模板: 明星| 民勤县| 保康县| 娄底市| 金山区| 嵊泗县| 黄龙县| 霍州市| 昂仁县| 景宁| 慈溪市| 光山县| 孟州市| 梧州市| 恩施市| 毕节市| 资中县| 耒阳市| 闽侯县| 和龙市| 五常市| 沙湾县| 鹤山市| 松江区| 莎车县| 简阳市| 鹰潭市| 成安县| 西昌市| 绥滨县| 武功县| 缙云县| 崇信县| 乌兰察布市| 张家港市| 隆安县| 兴义市| 阿图什市| 商城县| 石门县| 日土县|