背景
在实际开发中,有时需要将关键日志直接持久化到 MongoDB,以便利用其灵活的查询能力进行分析或审计。这里分享一种基于 Log4j 集成 log4mongo 组件的实现方案。
依赖准备
确保项目中引入了 log4mongo 相关库,否则无法加载 org.log4mongo.MongoDbPatternLayoutAppender 类。
配置文件
在 log4j.properties 中配置根日志级别及控制台输出,同时定义指向 MongoDB 的 Appender。为了区分不同业务场景,我们配置了两个独立的 Appender,分别写入不同的集合。
log4j.rootLogger=INFO, stdout
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# MongoDB 输出 - 业务操作日志
log4j.logger.MongoDB=INFO,MongoDB
log4j.appender.MongoDB=org.log4mongo.MongoDbPatternLayoutAppender
log4j.appender.MongoDB.Threshold=INFO
log4j.appender.MongoDB.databaseName=mydb
log4j.appender.MongoDB.collectionName=optlog
log4j.appender.MongoDB.hostname=10.25.193.16
log4j.appender.MongoDB.port=9933
log4j.appender.MongoDB.layout=org.log4mongo.MongoDbPatternLayout
# MongoDB 输出 - 特定分类日志
log4j.logger.MongoDB2=INFO,MongoDB2
log4j.appender.MongoDB2=org.log4mongo.MongoDbPatternLayoutAppender
log4j.appender.MongoDB2.Threshold=INFO
log4j.appender.MongoDB2.databaseName=mydb
log4j.appender.MongoDB2.collectionName=abclog
log4j.appender.MongoDB2.hostname=10.25.193.16
log4j.appender.MongoDB2.port=9933
log4j.appender.MongoDB2.layout=org.log4mongo.MongoDbPatternLayout
注意这里使用了两个不同的 Appender 名称(MongoDB 和 MongoDB2),对应各自的 Logger 名称,这样可以更精细地控制日志流向。
代码实现
在 Java 代码中,通过 Logger.getLogger 获取对应的 Logger 实例即可。下面是一个简单的测试示例:

