天天看點

《SLF4J官方文檔》SLF4J遷移工具

SLF4J遷移者

SLF4J遷移者是一個很小的Java工具,用于将Java源檔案從Jakata Commons Logging(JCL)遷移到SLF4J。它也能将檔案從log4j遷移到SLF4J,或者從java.util.logging API到SLF4J。

SLF4J遷移者包括一個獨立的jar檔案,可以像獨立營運的java應用一樣運作。指令如下:

1

Java –jar slf4j-migrator-

1.7

.

21

.jar

一旦應用運作了,一個像下面的視窗會顯示:

《SLF4J官方文檔》SLF4J遷移工具

此應用的使用應該是一目了然的。請注意遷移工具隻是原地替換java檔案,這意味着将沒有已修改檔案的備份。在使用SLF4J遷移者前,你有義務備份你的檔案。

限制

SLF4J遷移者作為一個簡單的工具,用于幫你将使用JCL,log4j或JUL的項目檔案遷移到SLF4J。它隻能進行基本的轉換步驟。本質上來說,它将替換适當的導入行(import lines)和日志器聲明(logger declarations)。

MyClass是個使用JCL的簡單類,替換前如下:

01

package

some.

package

;

02

03

import

org.apache.commons.logging.Log;

04

import

org.apache.commons.logging.LogFactory;

05

06

public

MyClass {

07

08

Log logger = LogFactory.getLog(MyClass.

class

);

09

10

public

void

someMethod() {

11

logger.info(

"Hello world"

);

12

}

13

}

遷移後如下:

01

package

some.

package

;

02

03

import

org.slf4j.Logger;

04

import

org.slf4j.LoggerFactory;

05

06

public

MyClass {

07

08

Logger logger = LoggerFactory.getLogger(MyClass.

class

);

09

10

public

void

someMethod() {

11

logger.info(

"Hello world"

);

12

}

13

}

盡管轉換規則很基本,但SLF4J遷移者仍可以大大緩解java項目從JCL到SLF4J遷移的繁重工作。從log4j到SLF4J,或從JUL到SLF4J的遷移規則是類似的。

一般限制

•生成腳本不會被修改

您的Ant / Maven/Ivy生成腳本需要手動修改為使用SLF4J,而不是JCL或log4j。

•隻有支援String類型的消息

如果您的日志聲明的包含非字元串對象作為其唯一的參數,你将不得不在對象上手動添加一個toString()方法調用。

例如:

1

logger.debug(

new

Object());

已被手動重新寫為

1

logger.debug(

new

Object().toString());

•不支援FATAL級别。

你必須将它們手動轉換。 此限制不被視為非常嚴重的,因為通常有極少數的日志聲明承載FATAL級别。

•如果一個方法聲明在同一行的多個日志器,轉換将是不完整的。 例:

1

public

void

someMethod(Log l1, Log l2) {

2

...

3

}

4

5

will be converted as

6

7

public

void

someMethod(Log l1, Logger l2) {

8

...

9

}

從log4j的遷移時限制

•NDC語句保持原樣

由于NDC不支援SLF4J,遷移者不能正确處理NDC語句。 你必須手動進行遷移到MDC。 同樣,因為通常很少NDC語句,即使在大型項目中此限制不被視為嚴重。

請注意,相反,NDC,因為SLF4J支援這樣的語句MDC陳述正确遷移。

•調用PropertyConfigurator或DomConfigurator無法遷移,因為他們沒有SLF4J對應項。

從JUL遷移時的限制

•java.util.logging.Logger調用finest() finer()或finest()方法都保留原樣。

鑒于finest() finer()或finest()調用可以映射到兩個trace()或debug()調用在SLF4J,不可能猜出使用者希望如何這些調用映射。

•所有比對的字元串“.severe(”會由字元串“.error(”替換,不帶任何上下文分析。同樣地,所有的字元串比對“.warning(”是由“.warn(”所取代。

由于比對/替換操作不是根據語境更改的,如果你的代碼包含了一個名為”severe” 或 “warning”,,那麼遷移的結果将具有編譯錯誤的方法。 幸運的是,這樣的錯誤應該是罕見的,易于識别的。

•在定義下面的方法調用java.util.logging.Logger類需要手動遷移:log,logp,logrb,entering,exiting。

轉載自 并發程式設計網 - ifeve.com