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

Log4j MongoDB4 Appender报错:找不到MongoDb4DocumentObject类编解码器

解决Log4j Mongo4 Appender编解码器缺失异常

1. 检查并补全依赖

这个异常核心原因是MongoDB Java驱动找不到MongoDb4DocumentObject对应的编解码器,大概率是依赖不全导致的。

  • 用Maven的话,在pom.xml里加这两个依赖:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-mongodb4</artifactId>
    <version>你的Log4j版本,比如2.20.0</version>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.10.0</version> <!-- 选和Log4j版本兼容的驱动版本 -->
</dependency>
  • 用Gradle的话,在build.gradle里加:
implementation 'org.apache.logging.log4j:log4j-mongodb4:2.20.0'
implementation 'org.mongodb:mongodb-driver-sync:4.10.0'

注意:Log4j和MongoDB驱动版本要匹配,建议用Log4j官方推荐的对应版本。

2. 手动注册编解码器(依赖正常仍报错时用)

如果依赖没问题还是出异常,就手动给MongoDb4DocumentObject注册编解码器:

import org.apache.logging.log4j.mongodb4.MongoDb4DocumentObject;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;

// 构建编解码器注册表
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(
    MongoClients.getDefaultCodecRegistry(),
    CodecRegistries.fromProviders(PojoCodecProvider.builder()
        .register(MongoDb4DocumentObject.class)
        .automatic(true)
        .build())
);

// 用自定义注册表创建MongoClient
MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
        .codecRegistry(pojoCodecRegistry)
        .applyConnectionString(new ConnectionString("你的MongoDB连接串"))
        .build()
);

要是用编程式配置Log4j,直接引用这个MongoClient实例就行;用XML配置的话,确保配置能加载到这个自定义注册表。

3. 核对Log4j配置文件

检查log4j2.xml这类配置文件里的Mongo4 Appender配置是否正确,示例配置参考:

<Appenders>
    <Mongo4 name="MongoDBAppender" databaseName="logs" collectionName="applicationLogs">
        <ConnectionString>mongodb://localhost:27017</ConnectionString>
        <PatternLayout pattern="%d{ISO8601} [%t] %-5level %logger{36} - %msg%n"/>
    </Mongo4>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="MongoDBAppender"/>
    </Root>
</Loggers>

确认连接串、数据库名、集合名没写错,避免因配置错误间接引发编解码器问题。

4. 清理缓存重新构建项目

有时候依赖缓存会搞出问题,执行以下操作重置:

  • Maven:mvn clean install
  • Gradle:gradle clean build
    清掉旧缓存后重新下载依赖、构建项目,确保依赖正确引入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:00