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

col17t5w  于 2023-10-18  发布在  其他
关注(0)|答案(8)|浏览(125)

我将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中不再是一个有效的方法了吗?

vlf7wbxs

vlf7wbxs1#

您会注意到Logger不再声明这样的方法。
log4j版本2做了一些重大的改变。Here's更改日志。getLogger seems to have been moved to a LogManager class.
Here's他们建议如何进行迁移。

gz5pxeao

gz5pxeao2#

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

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

myzjeezk3#

对于新的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());
注意:不要忘记把配置文件放到项目的根目录下,否则你将无法获得你的日志。
希望这将有助于有人亲切问候

9rygscc1

9rygscc14#

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

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

6gpjuf905#

是的,你的观察是正确的。它不支持getLogger()方法。
查看此文档链接:http://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html
示例教程:http://www.javabeat.net/log4j-2-example/

smdncfj3

smdncfj36#

正如在其他答案中提到的,Logger现在是一个接口,您可以从LogManager获取Logger示例。
API现在从实现中分离出来,给给予团队在不破坏用户代码的情况下更改实现的自由。API很少会改变,如果它改变了,它将是2.x版本,而不是2.0.x版本。也就是说,总是使用匹配的log4j-api和log4j-core版本可能是一个好主意。

pieyvz9o

pieyvz9o7#

要在类上使用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");
}
s6fujrry

s6fujrry8#

这对我很有效:

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

相关问题