You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Alex Donate (JIRA)" <ji...@apache.org> on 2019/01/21 02:41:00 UTC
[jira] [Created] (LOG4J2-2534) MongoDb3 Appender not working when
using a Connection Factory
Alex Donate created LOG4J2-2534:
-----------------------------------
Summary: MongoDb3 Appender not working when using a Connection Factory
Key: LOG4J2-2534
URL: https://issues.apache.org/jira/browse/LOG4J2-2534
Project: Log4j 2
Issue Type: Bug
Components: Appenders, MongoDB
Affects Versions: 2.11.1
Reporter: Alex Donate
When using log4j-mongodb3 appender with a connection factory , receiving exception
2019-01-20 21:33:02,438 main ERROR Unable to write to database [noSqlManager\{ description=databaseAppender, bufferSize=0, provider=mongoDb{ database=logger } }] for appender [databaseAppender]. org.bson.codecs.configuration.CodecConfigurationException: *Can't find a codec for class org.apache.logging.log4j.Level.*
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ChildCodecRegistry.get(ChildCodecRegistry.java:51)
at org.bson.codecs.DocumentCodec.writeValue(DocumentCodec.java:184)
at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:199)
at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:141)
at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
at com.mongodb.operation.BulkWriteBatch$WriteRequestEncoder.encode(BulkWriteBatch.java:387)
Here is my log4j2.xml for the nosql appender
<NoSql name="databaseAppender">
<MongoDb3 databaseName="logger" collectionName="applicationLog" factoryClassName="logger.ConnectionFactory"
factoryMethodName="getNewMongoClient" />
</NoSql>
Here is my ConnectionFactory
public class ConnectionFactory {
public static MongoClient getNewMongoClient () {
MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017/logger");
MongoClient client = new MongoClient(uri);
return client;
}
}
Work around solution was to add on the Connection Factory my own MongoClient Options, to add the Logger Codec
public static MongoClient getNewMongoClient () {
MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder()
.codecRegistry(CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new LevelCodec()),
MongoClient.getDefaultCodecRegistry()));
MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017/logger",optionsBuilder);
MongoClient client = new MongoClient(uri);
return client;
}
I feel this should be added as part of the MongoDbProvider .java, when using a Connection Factory to also set the Codec.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)