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
相关产品推荐
相关产品推荐

