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

时间:2014-09-22 14:07:11

标签: java logging log4j log4j2

我将log4j-api-2.0.0.jarlog4j-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中的有效方法吗?

7 个答案:

答案 0 :(得分:21)

您会注意到Logger不再声明这样的方法。

log4j版本2做了一些重大改变。 Here's更改日志。 getLogger seems to have been moved to a LogManager class.

Here's他们建议如何进行迁移。

答案 1 :(得分:8)

我举一个更好理解的例子。

var myval = $("input:radio").val(["cat"]);
alert(myval);

答案 2 :(得分:3)

使用新的Log4J 2,你必须至少添加(在我的情况下)log4j-core-2.8.2,log4j-api-2.8.2,在其他一些情况下你可能还需要添加log4j-web-2.8 0.2。 因此,当您想要导入日志时 import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;

最后用法将是 static final Logger LOGGER = LogManager.getLogger(WebService.class.getName());

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

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

如其他答案中所述,Logger现在是一个界面,您可以从LogManager获取Logger实例。

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

答案 5 :(得分:1)

您使用的是log4j第2版。

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

答案 6 :(得分:0)

要在班级上使用getLogger()方法,请导入记录器

import java.util.logging.Logger;

并按如下方式使用

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

请记住,此方法采用字符串参数。

或使用 Logger from org.apache.log4j 包,如下所示

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");
}