首页 > 解决方案 > 从 ASP.NET Core 2.1 中的 MySqlConnector 获取查询日志

问题描述

如何从 ASP.NET Core 2.1 MVC 应用程序中的 MySqlConnector(与 Dapper 一起使用)获取查询日志?

标签: c#mysqlasp.net-coreasp.net-core-2.1

解决方案


使用 NuGet安装MySqlConnector.Logging.Microsoft.Extensions.Logging

# Core CLI
dotnet add package MySqlConnector.Logging.Microsoft.Extensions.Logging
# VS package manager
Install-Package MySqlConnector.Logging.Microsoft.Extensions.Logging

并在方法中设置提供者Startup.Configure

var factory = app.ApplicationServices.GetService<ILoggerFactory>();
MySqlConnectorLogManager.Provider = new MicrosoftExtensionsLoggingLoggerProvider(factory);

更新我发现这会导致在托管服务构造函数中运行数据库查询时,必须在调用任何 MySqlConnector 方法之前设置日志记录提供程序。这可以通过在末尾添加Startup.ConfigureServices来解决:

var loggerFactory = provider.GetService<ILoggerFactory>();
MySqlConnectorLogManager.Provider = new MicrosoftExtensionsLoggingLoggerProvider(loggerFactory);

显示日志

要显示日志,需要将日志级别设置为 debug in appsettings.json。我会推荐基于组件的方法,因为将所有内容都设置为调试会导致大量日志。

对于查询,TextCommandExecutor负责。我们可以像这样为他启用日志:

{
  "Logging": {
    "LogLevel": {
      "Default": "warning",
      "TextCommandExecutor": "debug"
    }
  }
}

示例输出:

dbug: TextCommandExecutor[0]
      Session1.1 ExecuteBehavior Synchronous CommandText:
                              SELECT varname, value
                              FROM setting
                              WHERE varname IN('bburl', 'recycle_forum', 'maxposts')

查找组件

可以通过两种方式找到组件名称:

查看源代码以调用记录器,如下所示:

static readonly IMySqlConnectorLogger Log = MySqlConnectorLogManager.CreateLogger(nameof(TextCommandExecutor));

设置调试的默认日志级别(仅在小型测试环境中)

{
  "Logging": {
    "LogLevel": {
      "Default": "debug"
    }
  }
}

现在您可以看到所有日志并找到级别之后的组件,例如dbug: TextCommandExecutor[0] ....

来源: https ://mysqlconnector.net/overview/logging/


推荐阅读