Все исключения отображаются в Azure Application Insights как RpcExceptions. Похоже, моя функция заключена в этот «Invoke» и может возвращать только RpcException вместо AppUserException, который я явно выбрасываю.
Это приводит к очень неясным данным. Что я могу сделать?
Я только что создал новую функцию для ее тестирования:
namespace FunctionApp1
{
public class Function1
{
private readonly ILogger _logger;
public Function1(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger();
}
[Function("Function1")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
throw new AppUserException("usererror");
}
}
}
< /p>
program.cs
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureAppConfiguration(builder =>
{
// KeyVault
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (string.IsNullOrWhiteSpace(keyVaultEndpoint))
{
throw new Exception("keyVaultEndpoint wasn't provided.");
}
var credentials = new DefaultAzureCredential();
builder.AddAzureKeyVault(new Uri(keyVaultEndpoint), credentials, new KeyVaultSecretManager());
// Azure App Config
var azureAppConfigEndpoint = GetAzureAppConfigEndpoint();
if (string.IsNullOrWhiteSpace(azureAppConfigEndpoint))
{
throw new Exception("azureAppConfigEndpoint wasn't provided.");
}
builder.AddAzureAppConfiguration(options =>
{
options.Connect(azureAppConfigEndpoint)
.UseFeatureFlags(options =>
{
options.CacheExpirationInterval = TimeSpan.FromSeconds(60);
});
});
builder.AddJsonFile("appsettings.json", optional: true);
})
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
services.Configure(options =>
{
var toRemove = options.Rules.FirstOrDefault(rule => rule.ProviderName
== "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (toRemove is not null)
{
options.Rules.Remove(toRemove);
}
});
services.AddSolutionServices();
})
.ConfigureLogging((hostingContext, logging) =>
{
// Make sure the configuration of the appsettings.json file is picked up.
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
})
.Build();
static string? GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("ASPNETCORE_HOSTINGSTARTUP__KEYVAULT__CONFIGURATIONVAULT");
static string? GetAzureAppConfigEndpoint() => Environment.GetEnvironmentVariable("AZURE_APPCONFIG_ENDPOINT");
host.Run();
Подробнее здесь: https://stackoverflow.com/questions/770 ... n-insights