java - Log4j2/Slf4j 和 Java 11

标签 java logging log4j2 slf4j java-11

我目前正在尝试使用 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的maven项目:slf4j-api:1.8.0-beta2

我在 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)

有人知道我做错了什么以及我该如何解决吗?

最佳答案

根据Log4j documentation :

Log4j provides support for JSR 223 scripting languages to be used in some of its components.

正如 Alan Bateman 在 Java 9 中的评论中所说,您必须使用 --add-modules java.scripting 或在module-info.java.

还要注意模块 jdk.scripting.nashorndeprecated in Java 11并将在未来的版本中删除。

关于java - Log4j2/Slf4j 和 Java 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714010/

相关文章:

python - 运行ffmpeg而不输出配置信息?

database - 如何启用 WCF 日志记录以便它写入数据库?

java - 运行由 shade 插件构建的独立应用程序时找不到 Log4j2 配置

java - Java中的动态多态和静态多态有什么区别?

java - 从 Emma 代码覆盖率报告中过滤 junit 测试类

java - 如何使用 AspectJ 有条件地记录不同的数据?

java - log4j2 不适用于 JAR

java - log4j2 - 在执行期间更改输出文件

java - SimpleNLG - 如何获得名词的复数形式?

javax.crypto AES 加密 - 我只需要调用 doFinal 吗?