976
阿裏雲
技術社區[雲棲]
《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
|
一旦應用運行了,一個像下麵的窗口會顯示:
此應用的使用應該是一目了然的。請注意遷移工具隻是原地替換java文件,這意味著將沒有已修改文件的備份。在使用SLF4J遷移者前,你有義務備份你的文件。
限製
SLF4J遷移者作為一個簡單的工具,用於幫你將使用JCL,log4j或JUL的項目文件遷移到SLF4J。它隻能進行基本的轉換步驟。本質上來說,它將替換適當的導入行(import lines)和日誌器聲明(logger declarations)。
MyClass是個使用JCL的簡單類,替換前如下:
03 |
import org.apache.commons.logging.Log;
|
04 |
import org.apache.commons.logging.LogFactory;
|
08 |
Log logger = LogFactory.getLog(MyClass. class );
|
10 |
public void someMethod() {
|
11 |
logger.info( "Hello world" );
|
遷移後如下:
03 |
import org.slf4j.Logger;
|
04 |
import org.slf4j.LoggerFactory;
|
08 |
Logger logger = LoggerFactory.getLogger(MyClass. class );
|
10 |
public void someMethod() {
|
11 |
logger.info( "Hello world" );
|
盡管轉換規則很基本,但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) {
|
7 |
public void someMethod(Log l1, Logger l2) {
|
從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
最後更新:2017-05-19 16:38:05