方法 getLogger() 不再是 log4j2 中 Logger 的成员?

问题描述 投票:0回答:8

我已将

log4j-api-2.0.0.jar
log4j-core-2.0.2.jar
导入到我的构建路径中。但不知何故,以下代码失败了:

import org.apache.logging.log4j.core.Logger;

public class TheClass {

    private static Logger log = Logger.getLogger(TheClass.class);

...

错误消息显示:

The method getLogger(Class<TheClass>) is undefined for the type Logger

我很好奇

getLogger()
不再是Logger中的有效方法?

java logging log4j log4j2
8个回答
39
投票

您会注意到

Logger
不再声明这样的方法。

log4j 第 2 版做出了一些重大更改。 这是更改日志。

getLogger
好像已经转移到
LogManager
班级了。

这里是他们建议如何进行迁移。


12
投票

我举一个例子是为了更好地理解。

private static Logger logger;
        static {
            try {   
                   // you need to do something like below instaed of Logger.getLogger(....);
                    logger = LogManager.getLogger(ResourceService.class); 
              } catch (Throwable th) {
                    throw new HRException("Cannot load the log property file", th);
            }
        }

6
投票

使用新的 Log4J 2,您必须至少添加(在我的情况下)log4j-core-2.8.2、log4j-api-2.8.2,在其他情况下您可能还需要添加 log4j-web-2.8.2 。 因此,当您想要获取日志记录时,您可以导入

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

最后的用法是

static final Logger LOGGER = LogManager.getLogger(WebService.class.getName());

注意:不要忘记将配置文件放入项目的根目录中,否则您将无法获取日志。

希望这对某人有帮助 亲切的问候


4
投票

如果您使用的是 log4j 版本 2。

private static final Logger LOGGER = LogManager.getLogger(TheClass.class);

2
投票

是的,你的观察是正确的。它不支持 getLogger() 方法。

查看此文档链接:http://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html

示例教程:http://www.javabeat.net/log4j-2-example/


2
投票

如其他答案中所述,

Logger
现在是一个接口,您可以从
LogManager
获取 Logger 实例。

API 现在与实现分离,使团队可以自由地更改实现而不破坏用户代码。 API 很少会更改,如果确实更改,也会是 2.x 版本,而不是 2.0.x 版本。也就是说,始终使用匹配的 log4j-api 和 log4j-core 版本可能是个好主意。


0
投票

要在类上使用 getLogger() 方法,请导入 Logger

import java.util.logging.Logger;

并按如下方式使用它

public class SpringBoot {
  private static final Logger LOGGER = Logger.getClass("SpringBoot");
}

请记住,此方法需要一个字符串参数。

或者使用 org.apache.log4j 包中的 Logger,如下所示

import org.apache.log4j.Logger;

public class MessageProcessor {

private static final Logger LOGGER = Logger.getLogger(MessageProcessor.class);

public void processMessage(Message<String> msg) {
    LOGGER.info("Message is about to be processed");
}

0
投票

这对我有用:

导入org.apache.logging.log4j.Logger;

私有静态最终 Logger 日志 = LogManager.getLogger(YourClass.class);

© www.soinside.com 2019 - 2024. All rights reserved.