首页 新闻 会员 周边

ASP.NET Core: 如何将启动失败的错误信息输出到控制台

0
悬赏园豆:30 [待解决问题]

一个 ASP.NET Core 应用因为启动时发生异常造成容器无法启动,却没有任何错误信息输出,尝试在 Program.cs 中用下面的代码将未处理异常输出到控制台

AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) =>
{
    if (e.IsTerminating && e.ExceptionObject is Exception ex)
    {
        Console.WriteLine(ex);
    }
};

但控制台依然无任何输出,请问如何解决这个问题?

dudu的主页 dudu | 高人七级 | 园豆:30943
提问于:2024-01-05 11:06
< >
分享
所有回答(2)
0

首先得确定异常发生在什么地方? 如果是用户代码 UnhandledException 还能抓到.
如果是更底层的异常, 在docker run 的时候能看到.

比如最近遇到了. base image升级到了net8,更底层的linux system packages 也随之有要求, 一台比较早版本的host上就run不起来. 初始化cli的时候挂掉了. 最后升级了主机系统才能正常跑.

czd890 | 园豆:14412 (专家六级) | 2024-01-05 12:31

是错误的 route template 引发异常造成 Aborted (core dumped),手动运行容器启动应用显示了错误信息,在 docker swarm 部署环境下 docker service logs 看不到错误信息,应该是 docker swarm 的问题

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2024-01-05 13:39

如果容器正常启动,docker service logs 可以正常看到 Console.WriteLine 输出

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2024-01-05 13:49

@dudu: swarm 好放弃了😂

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2024-01-05 14:52

@czd890: staging 环境用的还是 swarm

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2024-01-05 15:48
0

在 ASP.NET Core 中,异常处理方式与传统的 AppDomain.CurrentDomain.UnhandledException 事件略有不同。ASP.NET Core 使用了不同的管道和机制来处理异常。

要在 ASP.NET Core 应用中捕获启动时的异常并输出到控制台,你可以在 Main 方法中添加异常处理代码。以下是一个示例:

csharp
Copy code
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System;

namespace YourAspNetCoreApp
{
public class Program
{
public static void Main(string[] args)
{
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Console.WriteLine("Unhandled exception during application startup:");
Console.WriteLine(ex.ToString());
}
}

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

}
在上述代码中,我们使用了 try-catch 块来捕获启动时的异常,并将异常信息输出到控制台。这样,即使应用程序在启动时发生异常,你也能够看到相应的错误信息。

确保替换 YourAspNetCoreApp 为你实际的应用程序名称。这段代码应该放置在 Program.cs 文件中。

Technologyforgood | 园豆:5686 (大侠五级) | 2024-01-08 19:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册