我正在 .NET 8 中制作一个 Azure Function 应用程序。
我尝试通过 host.json 文件配置日志记录级别,但它无法按预期工作。我尝试非常简单地将默认级别设置为“警告”,然后将根命名空间设置为“信息”,以便我看到代码中的信息日志,而仅看到其他任何内容的警告:
"logLevel": {
"default": "Warning",
"Root.Namespace": "Information"
},
当我添加此内容时,日志记录确实发生了变化,因此发生了一些事情,但是我的信息日志从未显示出来。我只是在本地运行并查看控制台输出。
当我在 Program.cs 中配置它时,如下所示:
.ConfigureLogging(logging =>
{
logging.Services.Configure<LoggerFilterOptions>(options =>
{
options.AddFilter("Default", LogLevel.Warning);
options.AddFilter("Root.Namespace", LogLevel.Information);
});
})
这个效果很好。
发生什么事了?我正在登录从“Root.Namespace”下降的命名空间,即“Root.Namespace.Some.Thing.Else”
我读到的所有内容都说这应该有效?
编辑:如果我在 Program.cs 和 host.json 中都有它,它也不起作用,所以看起来 host.json 正在覆盖它。
当我添加此内容时,日志记录确实发生了变化,因此发生了一些事情,但是我的信息日志从未显示出来。
在 Azure Functions 中,您必须使用
Function.FunctionName
,而不是命名空间。然后就会出现日志:
主机.json:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
},
"default": "Warning",
"Function.Function1": "Information"
}
}
函数.cs:
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace FunctionApp6
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest tst,
ILogger ri_lger)
{
ri_lger.LogInformation("Hello Rithwik Bojja, How are You!!");
string ri_out = "Hello Rithwik";
return new OkObjectResult(ri_out);
}
}
}
输出:
或者它也可以与下面的host.json一起使用(对于多个函数,不需要添加所有函数名称):
在此我使用了
Functionappname.Function
:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
},
"default": "Warning",
"FunctionApp6.Function": "Information"
}
}
有关更多信息,请参阅我在 SO-Thread 中的回答。