首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LogManager.getLogger()无法确定Java11上的类名

LogManager.getLogger()无法确定Java11上的类名
EN

Stack Overflow用户
提问于 2018-10-24 00:06:54
回答 2查看 8.9K关注 0票数 23

我在Java11中使用log4j2 (2.11.1),并尝试使用以下命令获取Logger对象:

代码语言:javascript
复制
private static final Logger LOG = LogManager.getLogger();

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

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

代码语言:javascript
复制
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不受支持,因此记录器无法确定类名。

应该是这样工作的吗?当然,我不必将类名硬编码到每个记录器中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 03:45:22

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

我需要补充的是:

代码语言:javascript
复制
Multi-Release:true

我的载货单,一切都开始工作了。

票数 26
EN

Stack Overflow用户

发布于 2019-08-07 00:35:36

@DanielScott的答案是正确的。在使用Gradle Shadow插件时,我在build.gradle中添加了以下内容,以便将Multi-Release:true标志附加到清单中。

代码语言:javascript
复制
jar {
    manifest {
        attributes 'Multi-Release': 'true'
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52953483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档