我已将
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中的有效方法?
我举一个例子是为了更好地理解。
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);
}
}
使用新的 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());
注意:不要忘记将配置文件放入项目的根目录中,否则您将无法获取日志。
希望这对某人有帮助 亲切的问候
如果您使用的是 log4j 版本 2。
private static final Logger LOGGER = LogManager.getLogger(TheClass.class);
是的,你的观察是正确的。它不支持 getLogger() 方法。
查看此文档链接:http://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html
如其他答案中所述,
Logger
现在是一个接口,您可以从LogManager
获取 Logger 实例。
API 现在与实现分离,使团队可以自由地更改实现而不破坏用户代码。 API 很少会更改,如果确实更改,也会是 2.x 版本,而不是 2.0.x 版本。也就是说,始终使用匹配的 log4j-api 和 log4j-core 版本可能是个好主意。
要在类上使用 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");
}
这对我有用:
导入org.apache.logging.log4j.Logger;
私有静态最终 Logger 日志 = LogManager.getLogger(YourClass.class);