You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java项目ECS日志部署异常:Jar运行报'EcsLayout无效'错误

ECS日志配置在Jar包运行时报错"EcsLayout无效"的排查与解决

问题现象

  • 本地IntelliJ IDEA运行项目时,ECS日志可正常生成;但打包成Jar运行时抛出错误:

    ERROR File contains an invalid element or attribute "EcsLayout"
    且无日志文件生成。

  • 已测试Java 11、15、17版本,问题均存在。

已配置内容

ECS日志相关依赖

<dependency>
    <groupId>co.elastic.logging</groupId>
    <artifactId>log4j2-ecs-layout</artifactId>
    <version>1.5.0</version>
</dependency>
<dependency>
    <groupId>co.elastic.logging</groupId>
    <artifactId>ecs-logging-core</artifactId>
    <version>1.5.0</version>
</dependency>

Log4j2核心依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.17.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.1</version>
</dependency>

log4j2.xml配置

<Configuration status="INFO">
    <Appenders>
        <File name="FILE_JSON" fileName="app-logs/dataloader.log" immediateFlush="false">
            <EcsLayout serviceName="Dataloader"/>
        </File>
    </Appenders>

    <Loggers>
        <Logger name="com.idomoo" level="${env:LOG_LEVEL}" includeLocation="true" additivity="false">
            <AppenderRef ref="FILE_JSON"/>
        </Logger>

        <Logger name="*" level="ERROR" includeLocation="true" additivity="false">
            <AppenderRef ref="FILE_JSON"/>
        </Logger>

        <Root level="ERROR">
            <AppenderRef ref="FILE_JSON"/>
        </Root>
    </Loggers>
</Configuration>

项目其他依赖

包含大量software.amazon.awssdk系列依赖、mysql-connector-java、mongodb-driver-sync及org.apache.commons依赖。

排查与解决步骤

1. 确认依赖打包完整性

Jar运行时无法识别EcsLayout,大概率是相关依赖未被正确打包:

  • 检查打包插件配置(如Maven的maven-shade-plugin或spring-boot-maven-plugin),确保log4j2-ecs-layout和ecs-logging-core被纳入最终Jar。
  • 若使用Shade插件,必须添加ServicesResourceTransformer,避免Log4j2的插件注册文件丢失:
    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
        <mainClass>你的主类全路径</mainClass>
    </transformer>
    
    Log4j2自定义Layout通过META-INF/services/org.apache.logging.log4j.core.Layout文件注册,Shade时不合并该文件会导致Jar运行时无法识别EcsLayout。

2. 排查Log4j2版本冲突

  • 执行mvn dependency:tree查看依赖树,检查是否有其他依赖引入了不同版本的log4j-core或log4j-api。
  • 若存在冲突,在核心依赖中添加排除规则:
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    注:log4j2-ecs-layout 1.5.0兼容Log4j2 2.13.0+,当前2.17.1版本符合要求。

3. 验证Jar包内关键文件

  • 解压Jar包,确认log4j2.xml在resources目录下且内容无格式错误。
  • 检查META-INF/services/org.apache.logging.log4j.core.Layout文件是否存在,且包含co.elastic.logging.log4j2.EcsLayout条目。

4. 逐步定位冲突依赖

既然空项目相同配置可正常运行,可逐步将原项目的依赖逐个加入空项目,每次打包运行,定位到导致冲突的具体依赖(比如先加入AWS SDK,再加入数据库驱动等)。

内容的提问来源于stack exchange,提问作者Marina Rappoport

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:30:55