And*_*lin 10 logging entity-framework azure-functions
我在 .net5 (又名)中有一个 Azure 函数dotnet-isolated,并且我添加了这样的实体框架
services.AddDbContext<EfDbContext>(options =>
{
options.UseSqlServer(context.Configuration[...], builder =>
{
builder.EnableRetryOnFailure();
});
});
Run Code Online (Sandbox Code Playgroud)
当我运行该函数时,我在控制台中看到来自 EF 的数据库查询(根据颜色判断信息级别)。
我怎样才能禁用它们?我在我的中尝试了明显的选项host.json:
"logging": {
"logLevel": {
"Microsoft.EntityFrameworkCore": "Warning",
}
}
Run Code Online (Sandbox Code Playgroud)
和
"logging": {
"logLevel": {
"default": "Information",
"Microsoft.EntityFrameworkCore": "Warning",
"Microsoft.EntityFrameworkCore.Database": "Warning",
"Microsoft.EntityFrameworkCore.Query": "Warning"
}
}
Run Code Online (Sandbox Code Playgroud)
甚至
"logging": {
"logLevel": {
"Microsoft": "Warning",
}
}
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。唯一有效的选择是
"logging": {
"logLevel": {
"default": "Warning",
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
And*_*lin 15
找到办法了。虽然这有点奇怪,但我仍然想了解它是如何工作的以及为什么这样做。无论如何,从AppInsights日志中我发现EF日志写在Function.<YOUR_FUNCTION_NAME>.User category下。(结果是标准 EF 类别在某种程度上被函数运行时覆盖了?)。
这意味着我可以通过以下方式影响特定函数的整体日志级别
"logging": {
"logLevel": {
"Function.MyFunc1.User": "Debug",
"Function.MyFunc2.User": "Warning"
}
}
Run Code Online (Sandbox Code Playgroud)
在里面host.json。它可能会有所帮助,但不能解决我的问题。
但是,如果我现在添加一个过滤器,如下所示Program.cs:
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
...
.ConfigureLogging(builder =>
{
builder.AddFilter("Microsoft.EntityFrameworkCore", LogLevel.Warning);
})
...
Run Code Online (Sandbox Code Playgroud)
EF 信息日志消失了。
| 归档时间: |
|
| 查看次数: |
4192 次 |
| 最近记录: |