You can subscribe to driver's events and log them.
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IMongoClient>(s =>
{
string connectionString = Configuration.GetConnectionString("MongoDb");
var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
settings.ClusterConfigurator = builder =>
{
var logger = s.GetRequiredService<ILogger<FileLogEvents>>();
builder.Subscribe(new FileLogEvents(logger));
};
return new MongoClient(settings);
});
}
}
public class FileLogEvents : IEventSubscriber
{
private readonly ILogger _logger;
private ReflectionEventSubscriber _subscriber;
public FileLogEvents(ILogger logger)
{
_logger = logger;
_subscriber = new ReflectionEventSubscriber(this);
}
public bool TryGetEventHandler<TEvent>(out Action<TEvent> handler)
{
return _subscriber.TryGetEventHandler(out handler);
}
public void Handle(CommandStartedEvent e)
{
_logger.LogInformation("Command Started: {Event}, Json: {Json}", e.CommandName, e.ToJson());
}
public void Handle(CommandSucceededEvent e)
{
_logger.LogInformation("Command Succeeded: {Event}", e.CommandName);
}
}
And Serilog configuration example
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("log.txt")
.CreateLogger();
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}