如何在MongoDB C#Driver 2.0中记录我的查询?
刚刚将我的应用程序升级到最新的稳定MongoDB C#Driver 2.0。
在迁移过程中,基本function已被破坏,即使是最简单的查询,例如: this.collection.Find(e => e.Id == id).SingleOrDefaultAsync()
也不会返回正确的数据。
检查了类映射和约定,但我希望看到输出查询以正确识别问题。
那么,应该如何在MongoClient
端完成?
在数据库级别设置分析是可能的,但不是一个好的解决方案,因为我们有几个应用程序和开发人员使用数据库。
我的应用程序目前在UI,业务和EF数据访问中使用Ninject.Extensions.Logging
和log4net
。
对于较新的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。