首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捕获Kestrel启动错误

捕获Kestrel启动错误
EN

Stack Overflow用户
提问于 2019-06-17 20:52:02
回答 1查看 1.8K关注 0票数 1

我在用Kestrel经营一个网站。我有一个IWebHost,并在上面调用.Run()。

代码语言:javascript
运行
复制
var app = host.Build();
app.Run();

这通常是很好的,但我有一个特定的情况,我很担心。有时指定的端口正在使用中。我知道我可以检查一个端口在配置/安装期间是否在使用,但是,总是有可能有人在我检查之后使用端口,而在Kestrel侦听之前。而且,我确信还有其他问题可能导致app.Run()行失败。

app.Run()失败时,我希望将错误消息记录到日志文件中。问题是应用程序似乎崩溃了,我无法处理异常。

例如,我尝试过这样做:

代码语言:javascript
运行
复制
    var app = host.Build();

    try
    {
        app.Run();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }

但它根本没有命中catch代码。

我搜索并找到了许多全局异常处理的示例,这些示例似乎处理将用户重定向到错误页面的问题,虽然我可能只是做错了,但我无法让其中的任何一个示例正常工作。

错误消息类似于以下内容:

crit: Microsoft.AspNetCore.Server.Kestrel 无法启动Kestrel。

还有一堆痕迹。通过从命令行运行,我能够看到这个错误,但我的用户不会。这就是为什么我真的希望能够捕捉到这个/记录它。

有人能帮我明白我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-17 21:36:27

您需要设置.CaptureStartupErrors(false)。文档这里

代码语言:javascript
运行
复制
public class Program
{
    public static void Main(string[] args)
    {
        try
        {
            CreateWebHostBuilder(args).Build().Run();       
        }
        catch(Exception ex)
        {
            Log.Fatal(ex, "App crashed");
        }
        finally
        {
            Log.CloseAndFlush();
        }            
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .CaptureStartupErrors(false) //allow startup errors to propagate
            .UseStartup<Startup>();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56638765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档