当前位置: 首页 > 知识库问答 >
问题:

Log4j2/Slf4j和Java11

商运锋
2023-03-14

我目前正在尝试用log4j/slf4j和java 11构建一个应用程序,但在运行时我面临这个问题:

2018-12-10 22:09:27,225 main INFO Cannot initialize scripting support because this JRE does not support it. java.lang.NoClassDefFoundError: javax/script/ScriptEngineManager
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.script.ScriptManager.<init>(ScriptManager.java:69)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:216)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:619)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:636)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:231)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j/org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
    at org.apache.logging.log4j/org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:121)
    at org.apache.logging.log4j.slf4j@2.11.1/org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:49)
    at org.apache.logging.log4j/org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
    at org.apache.logging.log4j.slf4j@2.11.1/org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:355)
    at org.slf4j/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:380)
    at fr.mrcraftcod.nameascreated/fr.mrcraftcod.nameascreated.NameAsCreated.<clinit>(NameAsCreated.java:39)
Caused by: java.lang.ClassNotFoundException: javax.script.ScriptEngineManager
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 17 more

此问题的根源代码是我的记录器的初始化:

private static final Logger LOGGER = LoggerFactory.getLogger(NameAsCreated.class);

我依赖于:

  • org.apache.logging.log4j: log4j-api: 2.11.1
  • org.apache.logging.log4j: log4j-core: 2.11.1
  • org.apache.logging.log4j: log4j-slf4j18-impl: 2.11.1
  • 一个依赖于org.slf4j: slf4j-api: 1.8.0-beta2的maven项目

我正在使用Java版本的OSX Mojave上:

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment AdoptOpenJDK (build 11+28-201810021910)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11+28-201810021910, mixed mode)

是否有人知道我做错了什么,以及我如何解决这个问题?

共有1个答案

江烨伟
2023-03-14

根据Log4j文件:

Log4j支持在其某些组件中使用的JSR 223脚本语言。

正如AlanBateman在Java 9中的评论所说,您必须使用Java模块add modules显式添加Java脚本模块。编写脚本或在模块信息中编写脚本。java。

另请注意,模块jdk.scripting.nashorn在Java11中已弃用,并将在未来的版本中删除。

 类似资料:
  • 问题内容: 我在我的项目中使用log4j2和slf4j并使用maven进行构建。我正在使用以下pom文件(仅显示了相关依赖项),但是我在此pom文件的下面复制了错误- 我需要添加/删除所有内容才能使其正常工作。我已经访问了错误中的url以及log4j2依赖项页面,因此请不要仅仅指向响应中的URL。 信息: pom文件 更新: 我在pom文件中添加了以下依赖项,并且在mavenrepository中

  • 我想动态地创建一个appender并将其添加到记录器中。然而,这似乎不可能使用slf4j。我可以将我的appender添加到log4j记录器中,但是我无法使用slf4j LoggerFactle检索记录器。 我想做的是:创建一个测试类(而不是jUnit测试),并在构造函数中传递一个记录器,供测试类使用。测试类的每个实例都需要自己的记录器和appender来保存日志,以便以后在HTML报告中使用。

  • SLF4J强制应用程序记录字符串。Log4J2 API支持记录任何CharSequence(如果您想记录文本),但也支持按原样记录任何对象。 Log4j 2 API支持日志记录消息对象、Java 8 lambda表达式和无垃圾日志记录(它在日志记录CharSequence对象时避免创建vararg数组和字符串)。

  • 我知道使用SLF4J和Log4j2作为记录器实现应该很容易。 您只需要将jar添加到类路径中。 我原以为我是这样做的,但我现在仍在努力 我的的关键部分 然后是 然后,查看lib文件夹 但是我没有得到相应的错误消息。 我正在使用 Eclipse版本:2020-09(4.17.0) 和

  • 我继承了一个anylogic项目,其中模型逻辑的部分已经在java项目中实现,这个模型也是从java项目中启动的。 这个项目有多个记录器配置,因为在项目的大部分部分使用log4j2,在很少部分使用logback后端的是slf4j。 在anylogic UI/Browser-Window中,您可以查看某个控制台,其中打印了一些输出: 追加器配置如下所示: 现在来看问题:两个日志记录框架/附加程序之间

  • 我有一个Maven项目,我想使用log4j2和slf4j。所以我添加了这个依赖项: 就我所知,它似乎起作用了。但我的问题是关于log4j-slf4j-impl的可传递依赖关系。 为什么IntelliJ显示log4j-core引入了log4j-api,但由于是重复的,所以忽略了它(我相信下面的截图是这么说的)?我该如何预防呢?