跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

基于 Log4j 将日志持久化至 MongoDB 实践

介绍如何使用 Log4j 配合 log4mongo 组件将应用日志直接写入 MongoDB 数据库。通过配置 Log4jProperties 文件定义 Appender,指定数据库地址、端口及集合名称,实现结构化存储。代码示例展示了获取 Logger 实例并记录业务信息的标准用法,适用于需要灵活查询和分析日志数据的场景。

片刻发布于 2015/1/1更新于 2026/10/2584 浏览
基于 Log4j 将日志持久化至 MongoDB 实践

背景

在实际开发中,有时需要将关键日志直接持久化到 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 实例即可。下面是一个简单的测试示例:

public static void main(String[] args) {
    // 获取绑定到 MongoDB 输出的 Logger
    Logger logger = Logger.getLogger("MongoDB");
    logger.info("{'provinceCode': null, 'channelSubCode': null, 'platFormCode': '002', 'optCode': null, 'startTimeLong': 1384599600000, 'processTime_sum': 10081,'count': 404, 'suc_count': 0,'suc_rate': '0.00000'}");

    // 获取另一个分类的 Logger
    Logger logger2 = Logger.getLogger("MongoDB2");
    logger2.info("{'provinceCode':123}");
}

注意事项

  1. 连接稳定性:生产环境建议增加重试机制或异步写入策略,避免日志写入阻塞主线程。
  2. 性能影响:频繁的网络 IO 可能影响应用性能,建议根据业务重要性分级配置日志级别。
  3. 数据格式:这里演示的是字符串形式存入,实际可根据需求自定义 Layout 以存储结构化 JSON 对象。

目录

  1. 背景
  2. 依赖准备
  3. 配置文件
  4. 控制台输出
  5. MongoDB 输出 - 业务操作日志
  6. MongoDB 输出 - 特定分类日志
  7. 代码实现
  8. 注意事项

更多推荐文章

查看全部
  • Linux Makefile 自动化编译实战指南及进度条实现
  • Docker 容器内 Java 与 Python 代码运行示例
  • 滑动窗口算法详解:从入门到实战
  • 基于 Python 与 Flask 的黑龙江旅游景点数据分析系统设计与实现
  • 2024 年多模态大模型技术发展白皮书
  • 线性 DP 经典四题详解:台阶、子段和、传球与乌龟棋
  • C++ STL map与set底层结构及迭代器实现详解
  • JavaScript 中 this 的解析:从 call、bind 到箭头函数
  • Linux 远程连接 Windows 桌面配置指南
  • VS Code 中 GitHub Copilot 安装后无法使用?排查与修复指南
  • 基于 Dify 与 Qwen3-VL 的低代码视觉智能应用构建
  • 分布式任务调度:多数据库兼容的策略封装
  • Qwen3-VL WEBUI 性能对比:Instruct 与 Thinking 版本
  • LightGlue ONNX C++ 推理实践
  • VSCode 中如何正确创建并推送 Git Tag:避坑指南与最佳实践
  • Coze 智能体开发指南:从配置到工作流实战
  • 云开发 Copilot:AI 赋能的低代码开发
  • Python 爬虫技术详解:核心难点、学习路径与实战规范
  • Spring AI 实战:基于 SSE 构建 MCP Server 与 Client
  • 10 款常用 Python 数据可视化工具推荐

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online