在线修改mongo日志输出级别,实现记录全量日志select、update等

MongoDB日志记录了数据库实例的健康状态、语句的执行状况、资源的消耗情况,所以日志对于分析数据库服务和性能优化很有帮助。

因此,很有必要花费一些时间来学习解析一下MongoDB的日志文件。

 

日志信息的格式

<日志时间> <严重级别> <信息所属分类> [<内容>] <消息>

例如 :

2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017

日志信息严重级别

级别

级别描述

F

Fatal

E

Error

W

Warning

I

Informational, for Verbosity Level of 0

D

Debug, for All Verbosity Levels > 0

信息所属分类

 

日志分类

英文

分类描述

登入信息

ACCESS

登入访问相关的信息,例如登录验证情况。

命令信息

COMMAND

数据库执行命令相关信息,例如,查询。

控制管理信息

CONTROL

记录控制管理相关的信息,例如数据库初始化。

FTDC信息

FTDC(full-time diagnostic data )

全程检测数据信息,例如Server的状态统计信息。

索引信息

INDEX

索引相关信息,例如索引的创建过程信息。

网络信息

NETWORK

网络相关信息,例如网络连接信息。

查询信息

QUERY

查询相关信息,例如查询计划信息。

副本集信息

REPL

副本集相关信息,例如副本集初始过程、心跳、回滚等信息

分片信息

SHARDING

分片相关信息,例如mongos的启动信息

存储信息

STORAGE

存储相关信息,例如将 storage 层的数据刷入磁盘的信息。

还原信息

RECOVERY

还原活动相关的信息

日志信息

JOURNAL

日志相关的信息

写操作信息

WRITE

写操作相关的信息,例如更新(update)的命令。

查询日志详细等级

 

MongoDB将日志详细等级划分为0~5

1.  0 是MongoDB日志的的默认级别,会包含 Informational  类信息。

2.  1~5 是调试级别,会记录客户端所有的完整请求

查询日志详细等级的命令

 db.getLogComponents()

修改日志详细等级

 

修改日志详细等级的途径有两种。

第一种 设置logComponentVerbosity 参数来进行修改。

另外还需说明的一点是日志分类还可以进一步细化,

例如:将systemLog 整体设置为1,其中 query 子项 设置为2。

 修改的具体命令为:

db.adminCommand( {

   setParameter: 1,

   logComponentVerbosity: {

      verbosity: 1,

      query: {

         verbosity: 2

      }

   }

} )

恢复原级别:

db.adminCommand( {

   setParameter:0,

   logComponentVerbosity: {

      verbosity: 0,

      query: {

         verbosity: -1

      } 

   }

} )

 

 

 

 

好的,以下是一个简单的 Java 程序,实现了保存模拟的用户日志数据到 MongoDB 数据库中,并实现了查询输出的功能。 首先,需要引入 MongoDB 的 Java 客户端驱动,可以在 Maven 中加入以下依赖: ``` <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.8</version> </dependency> ``` 然后,可以创建一个 Log 类,用于存储日志信息: ``` public class Log { private String level; private String message; private String stackTrace; private Date createdTime; // getters and setters } ``` 接下来,可以创建一个 MongoDBUtil 类,用于创建 MongoDB 的连接: ``` public class MongoDBUtil { public static MongoClient getMongoClient() { MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017"); return new MongoClient(uri); } } ``` 然后,可以创建一个 LogDAO 类,用于实现MongoDB 的操作: ``` public class LogDAO { private MongoClient mongoClient; private MongoCollection<Document> collection; public LogDAO() { mongoClient = MongoDBUtil.getMongoClient(); MongoDatabase database = mongoClient.getDatabase("test"); collection = database.getCollection("log"); } public void saveLog(Log log) { Document doc = new Document("level", log.getLevel()) .append("message", log.getMessage()) .append("stackTrace", log.getStackTrace()) .append("createdTime", log.getCreatedTime()); collection.insertOne(doc); } public List<Log> queryLog() { List<Log> logs = new ArrayList<>(); FindIterable<Document> iterable = collection.find(); iterable.forEach(doc -> { Log log = new Log(); log.setLevel(doc.getString("level")); log.setMessage(doc.getString("message")); log.setStackTrace(doc.getString("stackTrace")); log.setCreatedTime(doc.getDate("createdTime")); logs.add(log); }); return logs; } public void close() { mongoClient.close(); } } ``` 最后,可以创建一个 Main 类,用于测试 LogDAO 类中的方法: ``` public class Main { public static void main(String[] args) { LogDAO dao = new LogDAO(); Log log = new Log(); log.setLevel("ERROR"); log.setMessage("This is a test error message."); log.setStackTrace("java.lang.NullPointerException: Test"); log.setCreatedTime(new Date()); dao.saveLog(log); List<Log> logs = dao.queryLog(); logs.forEach(l -> System.out.println(l.getLevel() + ": " + l.getMessage())); dao.close(); } } ``` 运行该程序,可以看到输出了查询到的日志信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值