2016-10-12 62 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