2016-10-12 90 views
0

我想通過log4j綁定將現有項目從直接log4j遷移到slf4j。 還有我升級的log4j的版本從1.2到2.6從log4j-1.2遷移到slf4j與log4j-2.6綁定

一些常見的代碼更改爲: -

1.

import org.apache.log4j.Logger; 
. 
. 
. 
private final static Logger log = Logger.getLogger(SearchXYZ.class); 

成爲

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
. 
. 
. 
private final static Logger log = LoggerFactory.getLogger(SearchXYZ.class); 

2。

import org.apache.log4j.Logger; 
. 
. 
. 
private static final Logger logger = Logger.getLogger(XYZ.class); 
. 
. 
. 
logger.fatal("FAILURE", throwableObject); 

變得

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.slf4j.Marker; 
import org.slf4j.MarkerFactory; 
. 
. 
. 
private static final Logger logger = LoggerFactory.getLogger(XYZ.class); 
private static Marker fatal = MarkerFactory.getMarker("FATAL"); 
. 
. 
. 
logger.error(fatal, "FAILURE", throwableObject); 
  • 刪除附加目的地。
  • 等等。

    我卡住的一個地方是配置文件。

    AppConfigLog4jConfigurator.configureForBootstrap(); 
    

    它給編譯時錯誤說: - 爲org.apache.log4j.spi.Configurator

    類文件未找到

    這是什麼功能呢?什麼是可能的替代品?

    +0

    顯然AppConfigLog4jConfigurator不是Log4j的一部分,所以你從哪裏導入它?如果它是你的應用程序的類,你還應該提供它的源代碼。 – Danio

    +0

    我認爲它只在log4j裏面。 https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/Configurator.html 我不知道它是否也存在於log4j-2.x – Mike3162114

    +0

    @Danio AppConfigLog4jConfigurator可能在我的組織內部,但由於上述軟件包不存在,我遇到了問題。 AppConfigLog4jConfigurator擴展了Configurator接口。 – Mike3162114

    回答

    0

    首先,我不太清楚爲什麼你要切換到SLF4J API,因爲Log4j 2 API支持SLF4J所做的一切以及更多。在我自己的代碼中,我發現切換隻需要將導入和LoggerFactory更改爲LogManager。

    配置器是Log4j 1中的一個類,用於配置Log4j。它類似於Log4j 2中的配置器類。您可能想要調用其中一種初始化方法。

    +0

    根據[this](https://logging.apache.org/log4j/2.x/manual/migration.html),log4j 2.x折舊了很多東西,比如appender和一些配置器。所以我不得不在代碼中的任何地方進行更改,而我不知道代碼本身。 我知道我是否在使用帶有log4j綁定的slf4j,我只需要替換log4j jar和slf4j就可以處理所有事情。這就是爲什麼我想到遷移到slf4j。我讀過slf4j上的日誌記錄框架是一個很好的習慣,所以我們的代碼中沒有直接的依賴關係。 – Mike3162114

    +0

    Log4j 2的體系結構與Log4j 1的體系結構非常不同。如果您在Log4j 2中使用SLF4J並擁有自定義appender或配置,即使使用SLF4J也需要這些體系結構或配置。當然,您可以將其他Logging框架與SLF4J一起使用,但您也可以使用Log4j 2 API來實現。 SLF4J只是一個日誌API,但最終會調用Log4j的API,所以使用它就更有效率。它不會爲你「照顧一切」。將日誌API與實現分開是一個好習慣,這就是Log4j 2爲什麼這樣做的原因。 – rgoers