【问题标题】:Error processing element XXX: CLASS_NOT_FOUND错误处理元素 XXX:CLASS_NOT_FOUND
【发布时间】:2020-03-08 07:20:43
【问题描述】:

作为我工作的一部分,我正在创建一个简单的 log4j2 与我公司的自定义日志记录服务的集成。为此,我创建了两个类:ECSAppender 和 ECSLog。

ECSLog 是一个简单的类,具有用于标准化每个日志将具有的属性的属性。 XXXAppender 是一个将日志发送到我们公司的 Web 服务的 Appender,将日志集中在一个地方。

我已经完成了产品并在同一个项目中对其进行了测试,并且效果很好。但是,当我尝试将类打包到 jar 中并将其导入另一个项目时(这将是我们的开发人员所需要的),log4j2 无法找到 jar 中定义的类。我知道程序正在识别这些类,因为我能够调用和运行 ECSLog 类的方法(简单打印)。

要让 jar 中的 log4j2 可以识别 Appender 需要哪些配置?

我尝试过:通过 java cvf、maven clean 包创建一个 jar,并进入 jar 并编辑 MANIFEST 以包含“Multi-Release:true”。

这些选项都不会使类对 log4j2 可见。

日志类和附加程序工作正常。我的 log4j2.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG" packages="ECSLogging">
<Appenders>
    <ECSAppender name="ECSAppender">
        <PatternLayout>
            <pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
        </PatternLayout>
    </ECSAppender>
</Appenders>
<Loggers>
    <AsyncLogger name="ECSLogger" level="DEBUG" includeLocation="true">
          <AppenderRef ref="ECSAppender"/>
    </AsyncLogger>
</Loggers>
</Configuration>

我得到的错误:

2019-11-12 09:32:26,423 ERROR Error processing element ECSAppender: CLASS_NOT_FOUND

我希望 log4j2 能够识别我构建的 appender,即使它在 jar 中。

【问题讨论】:

  • 运行不起作用的应用程序时,您使用的部署模型是什么?它可能是 WAR、EAR,还是在具有不同类路径的环境中运行的东西?
  • @ptomli 该库被打包在一个 jar 中,Eclipse 正在运行不工作的应用程序 - 所以 javaw.exe 以 main 方法为目标。很简单。
  • 类真的叫XXXAppender吗?您的配置文件是否指定了类所在的包?我对 log4j2 配置格式不太熟悉,但我敢打赌,错误是准确的。在您的本地测试有效和 used-as-a-jar 测试失败之间是否没有任何变化?
  • 更正了 XXX 以进行澄清。我遵循的工作流程是:在项目 A 中选择包 -> 导出 .jar,保存在本地机器中。在项目 B 上,从 .jar 添加外部库。 ECSLog 类的方法工作正常,并且 log4j2.xml 文件在项目之间是相同的。两个项目中的简单主要方法也相同。
  • 如果您手动解压缩您生成的 jar,它是否真的在正确的位置包含正确的 .class 文件?有MANIFEST 文件吗?听起来你获取 JAR 文件的途径有点不寻常,为什么不直接使用 maven(或类似的)?

标签: java jar log4j log4j2


【解决方案1】:

感谢@ptomli 的帮助。原来我包装错了.jar。我为解决它而采取的步骤: 1. 拿项目 A(正在工作的那个)并删除包含 main 方法的包。 2. 使用 mvn clean package 生成该新项目的 jar。 3. 将该 jar 导入项目 B。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多