Sky's blog

          我和我追逐的夢

          常用鏈接

          統(tǒng)計

          其他鏈接

          友情鏈接

          最新評論

          slf4j1.6.0-RC0和logback的0.9.20版本不兼容

              今天,嘗試使用slf4j + logback的黃金組合,結(jié)果發(fā)現(xiàn)有點問題,slf4j和logback的最新版本不兼容。當(dāng)然slf4j是1.6.0-RC0,正式發(fā)布時logback應(yīng)該會跟進發(fā)布新的版本吧。

              使用的版本如下ivy文件所示:

                  <dependency org="org.slf4j" name="slf4j-api" rev="1.6.0-RC0"
                      conf
          ="compile -> master" />
                  
          <dependency org="ch.qos.logback" name="logback-classic"
                      rev
          ="0.9.20" conf="runtime -> master" />
                  
          <dependency org="ch.qos.logback" name="logback-core" rev="0.9.20"
                      conf
          ="runtime -> master" />

              slf4j是最新的1.6.0-RC0,logback也是最新的0.9.20。

              測試代碼如下:

                  Logger logger 
          = LoggerFactory.getLogger(HelloWorld.class);
                  logger.info(
          "Hello World");

                  
          // placeholder
                  logger.info("test placeholder:  param1 = {}, param = {}"100200);

              運行后日志如下:


                  
          08:21:19.812 [main] INFO  test.example1.HelloWorld - Hello World
          Exception in thread 
          "main" java.lang.NoSuchMethodError:

          org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava
          /lang/String;[Ljava/lang/Object;)

          Ljava
          /lang/String;
              at ch.qos.logback.classic.spi.LoggingEvent.getFormattedMessage(LoggingEvent.java:
          288)
              at ch.qos.logback.classic.spi.LoggingEvent.prepareForDeferredProcessing

          (LoggingEvent.java:
          196)
              at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:
          211)
              at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:
          108)
              at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend

          (UnsynchronizedAppenderBase.java:
          91)
              at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders

          (AppenderAttachableImpl.java:
          64)
              at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:
          275)
              at ch.qos.logback.classic.Logger.callAppenders(Logger.java:
          262)
              at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:
          465)
              at ch.qos.logback.classic.Logger.filterAndLog_2(Logger.java:
          456)
              at ch.qos.logback.classic.Logger.info(Logger.java:
          631)
              at test.example1.HelloWorld.main(HelloWorld.java:
          14)

              可以看到第一個普通的"logger.info("Hello World");"語句打印正常,但是第二個使用了slf4j的placeholder特性的info語句遭遇異常:類org.slf4j.helpers.MessageFormatter 中沒有l(wèi)ogback期望調(diào)用的一個方法。

               猜測是slf4j新的1.6.0-RC0版本對類MessageFormatter 做了調(diào)整,而原有調(diào)用它的logback 0.9.20版本還沒有更新。試著更改ivy設(shè)置為:

          <dependency org="ch.qos.logback" name="logback-classic"
                      rev
          ="0.9.20" conf="runtime -> *" />

              讓ivy自動將logback 0.9.20的依賴搞定,resolve成功后發(fā)現(xiàn)果然0.9.20是使用slf4j的1.5.11版本。運行上面的代碼,成功不再報錯:

          08:37:00.562 [main] INFO  test.example1.HelloWorld - Hello World
          08:37:00.578 [main] INFO  test.example1.HelloWorld - test placeholder:  param1 = 100, param = 200

              看來暫時還不能使用slf4j 1.6.0-RC0 + logback 0.9.20的組合了,看了一下logback的網(wǎng)站,沒有發(fā)現(xiàn)新的測試版本,只能退回到slf4j 1.5.11 + logback 0.9.20。等slf4j 1.6.0 release之后,logback 應(yīng)該會發(fā)布新的版本吧。小小的鄙視一下logback,作為嚴(yán)重依賴slf4j的項目,居然不及時跟進。我測試過log4j的版本在新的1.6.0-RC0就沒有出現(xiàn)類似問題。


          posted on 2010-04-26 08:54 sky ao 閱讀(3063) 評論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 西林县| 平原县| 郁南县| 宝鸡市| 甘洛县| 榆社县| 资中县| 喜德县| 固原市| 阿鲁科尔沁旗| 天气| 望都县| 青浦区| 太谷县| 固原市| 抚宁县| 金秀| 广汉市| 上栗县| 余姚市| 北辰区| 来凤县| 乐陵市| 禄劝| 灌阳县| 文成县| 邻水| 惠安县| 荃湾区| 柳州市| 涿州市| 民权县| 思茅市| 中西区| 枝江市| 冕宁县| 治多县| 巧家县| 隆德县| 闵行区| 常州市|