我使用 Log4j2 和 MongoDB NoSQL 附加程序将日志发送到 MongoDB 数据库。附加器工作正常,日志作为文档存储在 MongoDB 中。但是,我想在将文档保存到数据库之前对其进行修改(例如,添加、删除或更改字段)。
我尝试过使用PatternLayout和JsonLayout,但我无法根据需要修改文档。这是我当前 log4j2.xml 配置的简化版本:
<Appenders>
<NoSql name="mongoDbAppender">
<MongoDb4 connection="${spring:mongo.connection.string} />
<JsonLayout complete="false" compact="true">
<KeyValuePair key="testField" value="testValue" />
</JsonLayout>
</NoSql>
</Appenders>
使用此键值对似乎没有添加到文档中。
有没有办法在日志文档发送到 MongoDB 之前拦截或修改它?我想自定义日志文档,超出布局配置提供的范围。关于如何实现这一目标有任何指示或建议吗?
任何帮助或示例将不胜感激。
如NoSQL Appender Formatting中所述,有两种方法可以修改记录的NoSQL文档的结构:
MapMessage
的布局。大多数布局(包括 JsonLayout
)都会返回 String
,因此您无法使用它们。
您可以直接在 KeyValuePair
元素中添加单个字段作为嵌套
<NoSQL>
元素。 “value”属性支持运行时属性替换:
<Appenders>
<NoSql name="mongoDbAppender">
<MongoDb4 connection="${spring:mongo.connection.string}"/>
<KeyValuePair key="testField" value="testValue"/>
<KeyValuePair key="date" value="$${date:yyyy-mm-dd}"/>
</NoSql>
</Appenders>