如何在MongoDB C#Driver 2.0中记录我的查询?

刚刚将我的应用程序升级到最新的稳定MongoDB C#Driver 2.0。

在迁移过程中,基本function已被破坏,即使是最简单的查询,例如: this.collection.Find(e => e.Id == id).SingleOrDefaultAsync()也不会返回正确的数据。

检查了类映射和约定,但我希望看到输出查询以正确识别问题。

那么,应该如何在MongoClient端完成?

在数据库级别设置分析是可能的,但不是一个好的解决方案,因为我们有几个应用程序和开发人员使用数据库。

我的应用程序目前在UI,业务和EF数据访问中使用Ninject.Extensions.Logginglog4net

对于较新的C#MongoDB驱动程序,API已更改。 您必须使用接受MongoClientSettings对象的更复杂的构造函数,而不是连接字符串。

使用以下代码继续使用连接字符串,但启用每个命令的日志记录:

 var mongoConnectionUrl = new MongoUrl(connectionString); var mongoClientSettings = MongoClientSettings.FromUrl(mongoConnectionUrl); mongoClientSettings.ClusterConfigurator = cb => { cb.Subscribe(e => { logger.Log($"{e.CommandName} - {e.Command.ToJson()}"); }); }; var mongoCfgClient = new MongoClient(mongoClientSettings); 

您可以通过mongo驱动程序本身启用日志记录 :

 var settings = new MongoClientSettings { ClusterConfigurator = cb => { var textWriter = TextWriter.Synchronized(new StreamWriter("mylogfile.txt")); cb.AddListener(new LogListener(textWriter)); } }; 

如果您愿意,可以将它连接到log4net。