C# MongoClient 分析查询持续时间
C# MongoClient Profiling Query Duration
我喜欢分析我的 MongoDB 命令,如果持续时间超过限制,我喜欢在日志中写入警告。
Profiling/monitoring 与 Java 实现有据可查(参见 here) but for the .net driver I didn't found any doucmentation on https://www.mongodb.com/docs/。
我无意中发现了这个 solution here,但是配置文件设置在 MongoDB 级别。我希望它可以在我的 C# 代码中进行配置。
我找到了“隐藏”文档 here。
而我应用的解决方案是:
public MongoClient Create(string connectionString)
{
var settings = MongoClientSettings.FromConnectionString(connectionString);
settings.ClusterConfigurator = clusterBuilder =>
{
clusterBuilder.Subscribe<CommandSucceededEvent>(x => CheckDuration(x.Duration,x.CommandName));
clusterBuilder.Subscribe<CommandFailedEvent>(x => CheckDuration(x.Duration, x.CommandName));
};
return new MongoClient(settings);
}
private void CheckDuration(TimeSpan duration, string commandName)
{
if (duration.TotalMilliseconds > 100)
Log.Warn($"Command {commandName} took longer than 100 ms Duration={duration.TotalMilliseconds}ms");
}
我喜欢分析我的 MongoDB 命令,如果持续时间超过限制,我喜欢在日志中写入警告。 Profiling/monitoring 与 Java 实现有据可查(参见 here) but for the .net driver I didn't found any doucmentation on https://www.mongodb.com/docs/。
我无意中发现了这个 solution here,但是配置文件设置在 MongoDB 级别。我希望它可以在我的 C# 代码中进行配置。
我找到了“隐藏”文档 here。
而我应用的解决方案是:
public MongoClient Create(string connectionString)
{
var settings = MongoClientSettings.FromConnectionString(connectionString);
settings.ClusterConfigurator = clusterBuilder =>
{
clusterBuilder.Subscribe<CommandSucceededEvent>(x => CheckDuration(x.Duration,x.CommandName));
clusterBuilder.Subscribe<CommandFailedEvent>(x => CheckDuration(x.Duration, x.CommandName));
};
return new MongoClient(settings);
}
private void CheckDuration(TimeSpan duration, string commandName)
{
if (duration.TotalMilliseconds > 100)
Log.Warn($"Command {commandName} took longer than 100 ms Duration={duration.TotalMilliseconds}ms");
}