【发布时间】:2019-12-31 21:33:01
【问题描述】:
如何在 ASP.NET Core 2.1 MVC 应用程序中从 MySqlConnector(与 Dapper 一起使用)获取查询日志?
【问题讨论】:
标签: c# mysql asp.net-core asp.net-core-2.1
如何在 ASP.NET Core 2.1 MVC 应用程序中从 MySqlConnector(与 Dapper 一起使用)获取查询日志?
【问题讨论】:
标签: c# mysql asp.net-core asp.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);
要显示日志,需要将您的日志级别设置为在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] ...。
【讨论】: