Mongodb的log4j2问题日志记录可引发消息

问题描述

我正在尝试使用mongoDb3设置log4j2,并且一切正常,唯一的问题是当我长时间抛出带有此类消息的异常时

logger.error("Some Message",new Exception("Test")); 

我会得到一个错误

Caused by: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.apache.logging.log4j.mongodb3.MongoDbDocumentObject.

但是我可以轻松地记录错误

 logger.error(new Exception("Test"));

没有任何问题。

我们的项目主要使用slf4j进行日志记录,并且所有错误日志的样式都与第一个示例相同。 有什么办法可以在不更改所有异常日志的情况下解决错误

我的配置也很简单

<Nosql name="databaseAppender">
    <MongoDb3 databaseName="admin" collectionName="testLogger" server="localhost"
              username="***" password="****" />
</Nosql>

谢谢

解决方法

经过很多头痛和测试,我弄清楚了如何解决这个问题。 我只是将结果发布在这里,以防其他人遇到此问题。

由于某种原因org.apache.logging.log4j.mongodb3.MongoDbDocumentObject不会自动由MongoDb编解码器注册,因此我必须创建一个ConnectionFactory类来注册该类。

    public static MongoClient getMongoClient () {
    MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder()
            .codecRegistry(CodecRegistries.fromRegistries(
                    CodecRegistries.fromCodecs(new LevelCodec()),CodecRegistries.fromProviders(PojoCodecProvider.builder().register(MongoDbDocumentObject.class).build()),MongoClient.getDefaultCodecRegistry()));

    MongoClientURI uri = new MongoClientURI("mongodb://"+userName+":"+passWord+"@"+dbUrl+":"+port,optionsBuilder);
    return new MongoClient(uri);
}

显然,您必须更改log4j Appender才能使用类和方法:

 <NoSql name="databaseAppender">
            <MongoDb3 databaseName="test" collectionName="testLogger" factoryClassName="ClassName"
                      factoryMethodName="getMongoClient" />
        </NoSql>

我的依赖是:

    implementation group: 'org.slf4j',name: 'slf4j-api',version: '1.7.30'
// Log4j
implementation group: 'org.apache.logging.log4j',name: 'log4j-core',version: '2.13.3'
implementation group: 'org.apache.logging.log4j',name:'log4j-mongodb3',version:'2.13.3'
implementation group: 'org.apache.logging.log4j',name: 'log4j-slf4j-impl',version: '2.13.3'
implementation  group:'com.fasterxml.jackson.dataformat',name:'jackson-dataformat-xml',version:'2.9.4'
// https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver
implementation group: 'org.mongodb',name: 'mongo-java-driver',version: '3.12.7'