java - LogManager.getLogger() 无法确定 Java 11 上的类名

标签 java log4j2 java-11

<分区>

我在 Java 11 中使用 log4j2 (2.11.1) 并尝试使用以下方法获取 Logger 对象:

private static final Logger LOG = LogManager.getLogger();

(从 org.apache.logging.log4j 中的 log4j-api 导入)

在运行时,我收到以下错误:

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.UnsupportedOperationException: No class provided, and an appropriate one cannot be found.
at 
org.apache.logging.log4j.LogManager.callerClass(LogManager.java:555)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:580)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:567)
    at app.App.<clinit>(App.java:11)

这确实有意义 - getCallerClass 不受支持,因此记录器无法确定类名。

它应该以这种方式工作吗?当然,我不必将类名硬编码到每个记录器中吗?

最佳答案

原因是多版本类文件没有从 META-INF/versions/* 中获取,因为我在构建 shaded jar 时没有设置多版本标志.

我需要添加:

Multi-Release:true

对于我的 list ,一切都开始工作了。

关于java - LogManager.getLogger() 无法确定 Java 11 上的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52953483/

相关文章:

java - 如何根据另一个bean的属性注入(inject)一个bean?

java - 当我运行 .jar 时,出现 "No lwjgl in java.library.path"错误

使用 'java' 编译类时,Java 11 不会生成 .class 文件

tomcat服务器设置 java -Dlog4j2.formatMsgNoLookups=true ,你能看出它已经设置了吗?

java - 使用 java 11 编译 cumulocity-clients-java 时出错

spring-boot - 如何在 Vaadin 14 LTS 中正确处理拒绝访问

java - 在添加到集合之前过滤对象的最简洁方法?

java - Spring MVC 是否在每次调用时创建一个定义为 ModelAttribute 的新对象?

java - Log4j2 AsyncAppender 线程不会死在 tomcat 取消部署导致内存泄漏

log4j2 - Karaf 4.0.5 与 log4j2 : my bundle log output always in console but should be in file