apache / apache/logging-log4j2
Add support for event context lookup evaluation in the `NoSql` appender
- Dominant language
- Java
- Stars
- 3.6k
- Forks
- 1.7k
- Avg merge
- 21h 30m
- Merged PRs (30d)
- 27
Description
## Description
I want to use ConfigurationBuilder to config a NoSqlAppender, but I can`t set additionalFields, My code is:
``` java
MongoDb4Provider mongoDb4Provider = MongoDb4Provider.newBuilder()
.setConnectionStringSource("mongodb://localhost:27017/log.test")
.build();
NoSqlAppender mongoDbAppenderBuilder = NoSqlAppender.newBuilder()
.setName("MongoDbAppender")
.setProvider(mongoDb4Provider)
.build()
```
I lookup the source code, and I find NoSqlAppender.Builder class has a private field called "additionalFields", but is has not setter method;
So I use java reflect to set the value, My code is:
``` java
MongoDb4Provider mongoDb4Provider = MongoDb4Provider.newBuilder()
.setConnectionStringSource("mongodb://localhost:27017/log.test")
.build();
NoSqlAppender.Builder mongoDbAppenderBuilder = NoSqlAppender.newBuilder()
.setName("MongoDbAppender")
.setProvider(mongoDb4Provider)
.setConfiguration(config);
ReflectUtil.setFieldValue(mongoDbAppenderBuilder, "additionalFields", new KeyValuePair[] {
KeyValuePair.newBuilder().setKey("some_key").setValue("${map:some_key}").build(),
});
NoSqlAppender mongoDbAppender = mongoDbAppenderBuilder.build();
```
It works. But Map Lookup doesn`t work, My do log code is:
``` java
logger.info(new MapMessage(Map.of("some_key", "some_value")));
```
I expect ${map:some_key} can be resolved to some_value, but I get ${map:some_key} in MongoDB`s field. I tried ${map:some_key} $${map:some_key} %K{some_key} %map{some_key} %MAP{some_key} and none of them worked;
## Configuration
**Version:** 2.23.1
**Operating system:** Windows 11
**JDK:** JDK-17-oracle
Forgive my poor English, English is not my native language.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with NoSqlAppender.Builder and its additionalFields handling, then trace MapMessage event context through the MongoDb4Provider path. Reproduce the ConfigurationBuilder example and verify that ${map:some_key} resolves to some_value in the stored MongoDB field; done when the builder accepts the fields and event-context lookup works.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, mongodb
- Domain
- backend, observability-sre
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100