簡體   English   中英

如何在MongoDB C#Driver 2.0中記錄我的查詢?

[英]How do I log my queries in MongoDB C# Driver 2.0?

剛剛將我的應用程序升級到最新的穩定的MongoDB C#Driver 2.0。

在遷移過程中,基本功能已被破壞,即使是最簡單的查詢,例如: 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<CommandStartedEvent>(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。

使用2.7.3驅動程序登錄VS輸出。

using MongoDB.Bson;
using MongoDB.Driver;
using System;
#if TRACE
using System.Diagnostics;
using MongoDB.Driver.Core.Configuration;
#endif

...

public static ClusterBuilder ConfigureCluster(ClusterBuilder builder)
{
#if TRACE
    var traceSource = new TraceSource(nameof(Geotagging), SourceLevels.Verbose);
    builder.TraceWith(traceSource);
    builder.TraceCommandsWith(traceSource);
#endif
    return builder;
}

public MongoClient BuildMongoClient(string connection_string)
{
    var mongoUrlBuilder = new MongoUrlBuilder(connection_string);
    var settings = MongoClientSettings.FromUrl(mongoUrlBuilder.ToMongoUrl());
    settings.ClusterConfigurator = cb => ConfigureCluster(cb);
    return new MongoClient(settings);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM