我将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中的有效方法吗?
答案 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
答案 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");
}