【问题标题】:LogManager ClassNotFoundException when upgrade Log4j to Logj42将 Log4j 升级到 Logj42 时出现 LogManager ClassNotFoundException
【发布时间】:2021-06-07 08:25:05
【问题描述】:

我应该将我的项目 log4j 升级到 log4j2。所以我删除了 log4j 依赖项并添加了 log4j2。一些项目运行良好,但一个项目出现如下错误:

]] Root cause of ServletException.
java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
    at jsp_servlet.__view._jspService(__view.java:86)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:35)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1029)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:990)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:104)
    at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:611)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:543)
    Truncated. see log file for complete stacktrace

我使用 mvn dependency:tree 命令并试图找到依赖项和 我试图排除每个可能相关的子库,但仍然得到相同的错误。

代码:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger log = LogManager.getLogger(View.class);

依赖:

Maven: commons-io:commons-io:2.8.0
Maven: javax.servlet:servlet-api:2.5
Maven: oracle:ojdbc6:11.2.0.3
Maven: org.apache.logging.log4j:log4j-api:2.14.0
Maven: org.apache.logging.log4j:log4j-core:2.14.0
Maven: org.apache.pdfbox:fontbox:2.0.23
Maven: org.apache.pdfbox:pdfbox:2.0.23
Maven: org.springframework:spring-beans:5.2.12.RELEASE
Maven: org.springframework:spring-core:5.2.12.RELEASE
Maven: org.springframework:spring-web:5.2.12.RELEASE

log4j2.properties:

status = error
name = PropertiesConfig

#Make sure to change log file path as per your need
property.filename = path/to/filename

filters = threshold

filter.threshold.type = ThresholdFilter
filter.threshold.level = debug

appenders = console,rolling

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %5p - %d{yyyy-MM-dd HH:mm:ss.SSS} - %F:%L - %m%n

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = '-'yyyy-MM-dd'.log'
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %5p - %d{yyyy-MM-dd HH:mm:ss.SSS} - %F:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 20

loggers = rolling

#Make sure to change the package structure as per your application

logger.rolling.name = com.thy.dvs
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile

rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT

【问题讨论】:

  • org.apache.logging.log4j:log4j-api:2.14.0 应该包含 org.apache.logging.log4j.LogManager 所以可能与其说是依赖冲突,不如说是打包错误?
  • 很抱歉没有添加我正在使用的服务器。我使用 weblogic 服务器。@JeroenSteenbeeke
  • 啊,大概是这个问题吧? stackoverflow.com/a/35774403/8819761

标签: java log4j log4j2 classnotfoundexception


【解决方案1】:

我发现问题至少如下图所示。 当我向 pom.xml 添加新的依赖项时,我还必须将依赖项“可用元素”添加到我的 ear/war 包中。

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2021-05-14
    • 2023-03-06
    相关资源
    最近更新 更多