我使用 mcr.microsoft.com/dotnet/sdk:8.0 启动了一个容器,并按照 https://learn.microsoft.com/en-us/azure/azure-functions/create- 中的说明安装了 Azure Function 工具。第一个函数-cli-csharp?tabs=linux%2Cazure-cli。 这些说明不起作用,因为他们的 InRelease 文件被搞乱了,但我确实手动下载了软件包并安装了它。
我的
dotnet --version
给出8.0.403
,func --version
给出4.0.6280
。
完成后,我使用
func new
并选择 1. dotnet (isolated worker model)
、1. c#-isolated
和 2. HttpTrigger
。 最后,我给出了函数名称MyFunction
。
这为我提供了运行函数所需的所有文件,并且它响应 http 请求。
然后我修改了构造函数,为我感兴趣的每个级别添加
LogXXXX()
消息。生成的整个源文件是:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace t4
{
public class MyFunction
{
private readonly ILogger<MyFunction> _logger;
public MyFunction(ILogger<MyFunction> logger)
{
_logger = logger;
logger.LogError("Testing Error");
logger.LogWarning("Testing Warning");
logger.LogInformation("Testing Information");
logger.LogDebug("Testing Debug");
logger.LogTrace("Testing Trace");
}
[Function("MyFunction")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
如果我使用
func start
或 func host start
执行此操作,然后触发该函数,我会收到 LogError
、LogWarning
和 LogInformation
消息,但不会收到 LogDebug
或 LogTrace
。
我尝试了多种不同的方式修改hosts.json。
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
},
"logLevel": {
"Function": "Trace",
"Function.MyFunction": "Trace",
"Function.MyFunction.User": "Trace",
"Functions.MyFunction": "Trace",
"Functions.MyFunction.User": "Trace",
"default": "Trace"
}
}
}
这对代码的其他部分有影响,但对我的功能没有影响。 我原以为
Function.MyFunction.User
会有效果,但没有。 在看到相关消息后,我将Functions*
口味作为一个疯狂的猜测。
我也尝试过这个答案https://stackoverflow.com/a/65688442/12195361但没有不同的行为。
我使用
或func start
执行此操作,然后触发该函数,我收到func host start
、LogError
和LogWarning
消息,但没有LogInformation
或LogDebug
。LogTrace
我也使用下面的program.cs获得了跟踪和调试日志:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var rith_cho = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(ri_sc =>
{
ri_sc.AddApplicationInsightsTelemetryWorkerService();
ri_sc.ConfigureFunctionsApplicationInsights();
ri_sc.Configure<LoggerFilterOptions>(rich =>
{
LoggerFilterRule ri_tr = rich.Rules.FirstOrDefault(rule => rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (ri_tr is not null)
{
rich.Rules.Remove(ri_tr);
}
});
})
.ConfigureAppConfiguration((hostContext, ri_cfg) =>
{
ri_cfg.AddJsonFile("host.json", optional: true);
})
.ConfigureLogging((hct, rilg) =>
{
rilg.AddApplicationInsights(rics =>
{
rics.IncludeScopes = true;
});
rilg.AddConfiguration(hct.Configuration.GetSection("Logging"));
})
.Build();
rith_cho.Run();
主机.json:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
},
"logLevel": {
"Function": "Trace",
"Function.Function1": "Trace",
"Function.Function1.User": "Trace",
"default": "Trace"
}
}
}
Function.cs 与你的相同。
输出: