Azure Function Host Builder 控制台错误和异常

问题描述 投票:0回答:1

我有一个 Azure Function 应用程序,其中包含以下代码,该代码是从

program.cs
HostBuilder().ConfigureServices
:

调用的
if (string.IsNullOrEmpty(config[key]))
{
    var errorMessage = $"Configuration key '{key}' is missing or empty.";
    Console.WriteLine(errorMessage); // this isn't shown on the console ?!
    throw new InvalidOperationException(errorMessage); // if I remove this, then I see the console message, but I want an exception raised.
}

这会检查一些基本配置设置,并向下一个开发人员显示他们在

local.settings.json
中缺少的内容,但是控制台消息不会显示。

通知用户并登录 Azure 缺少什么内容的最佳方式是什么?

这是我到目前为止所学到的

启动时发生的异常不会记录到控制台或应用程序洞察中,所以...

在本地主机上,您可以调试并查看哪里发生异常。

在 Azure 中:登录 Azure 门户,导航至 Function App > 诊断并解决问题

  1. 向下滚动,查看热门故障排除工具
  2. 功能应用程序宕机或报告错误,
  3. 不滴滴的功能 > 查看详情
    查看例外列表(可能靠近顶部)

以上基于:https://stackoverflow.com/a/62688703/74449

错误可能会“缓存”在门户中,请在此处查看如何清除它们:https://stackoverflow.com/a/76232621/74449

简化示例
该项目以 .NET 8.0 为目标,

"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"

程序.cs:

using System;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices((context, services) =>
    {
        var errorMessage = $"Oh no";
        Console.WriteLine(errorMessage); // this isn't shown on the console ?!
        throw new InvalidOperationException(errorMessage);

    })
    .Build();

host.Run();

给出这个控制台日志:

Azure Functions Core Tools
Core Tools Version:       4.0.6280 Commit hash: N/A +421f0144b42047aa289ce691dc6db4fc8b6143e6 (64-bit)
Function Runtime Version: 4.834.3.22875

[2024-09-18T03:26:05.944Z] Found C:\Repos\__redacted__\redacted.csproj. Using for user secrets file configuration.

C:\Program Files\dotnet\dotnet.exe (process 15024) exited with code -1.
Press any key to close this window . . .

如果我将

throw new InvalidOperationException(errorMessage)
更改为
return
那么日志将显示以下内容:

Azure Functions Core Tools
Core Tools Version:       4.0.6280 Commit hash: N/A +421f0144b42047aa289ce691dc6db4fc8b6143e6 (64-bit)
Function Runtime Version: 4.834.3.22875

[2024-09-18T03:30:06.504Z] Found C:\Repos\__redacted__\redacted.csproj. Using for user secrets file configuration.
[2024-09-18T03:30:09.835Z] Azure Functions .NET Worker (PID: 4448) initialized in debug mode. Waiting for debugger to attach...
[2024-09-18T03:30:09.835Z] Oh no
[2024-09-18T03:30:09.899Z] Worker process started and initialized.
... etc...
azure-functions startup
1个回答
0
投票

在独立的Azure函数中,函数从Program.cs开始,如果我们从program.cs抛出异常,部署后在本地或Azure中运行时它将不会记录:

enter image description here

在本地,按继续后不会开始运行。

但是,如果您想记录该错误并运行您使用的其余函数,可以在 Program.cs 下面:

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

var rith = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices((context, rit) =>
    {
        rit.AddLogging();
    })
    .ConfigureLogging(ss =>
    {
        ss.AddConsole();
    })
    .Build();
var ricfg = rith.Services.GetRequiredService<IConfiguration>();
var rilg = rith.Services.GetRequiredService<ILogger<Program>>();
var ri = "xxx";
if (string.IsNullOrEmpty(ricfg[ri]))
{
    var errorMessage = $"Hello Rithwik,  key '{ri}' is not there";
    rilg.LogError(errorMessage);
}
rith.Run();

enter image description here

因此,根据上述观察,我得出的结论是,如果 Program.cs 抛出任何异常,则不会登录异常,并且该功能在部署后也将可用。只有 Program.cs 之外的异常才有效。

© www.soinside.com 2019 - 2024. All rights reserved.