c# - 从 ASP.NET Core 2.1 中的 MySqlConnector 获取查询日志
问题描述
如何从 ASP.NET Core 2.1 MVC 应用程序中的 MySqlConnector(与 Dapper 一起使用)获取查询日志?
解决方案
使用 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] ...
.
推荐阅读
- python - 如何让我的 docker 文件复制 requirements.txt 并正确公开端口
- html - 使用 :: before 设置边框
- azure-devops - 使用 MSAL 对 ADO Rest API 进行身份验证返回未找到
- flutter - 如何摆脱抖动中资产图像的加载时间
- flutter - 如何添加搜索结果“未找到结果”文本?
- c# - 在 .Net Core 中,是否可以跨多个 DLL 锁定一些代码?
- discord - Discord.js V.13 使用 Collector 收集一次
- charindex - 如何使用雪花代码获取字符串中反斜杠的字符索引。例如我有一个字符串值 a'bcd\bh001'
- java - 使用 google-credential.json 部署 Heroku 应用程序
- amazon-web-services - 发布 beanstalk 环境钩子问题