我在用Kestrel经营一个网站。我有一个IWebHost
,并在上面调用.Run()。
var app = host.Build();
app.Run();
这通常是很好的,但我有一个特定的情况,我很担心。有时指定的端口正在使用中。我知道我可以检查一个端口在配置/安装期间是否在使用,但是,总是有可能有人在我检查之后使用端口,而在Kestrel侦听之前。而且,我确信还有其他问题可能导致app.Run()行失败。
当app.Run()
失败时,我希望将错误消息记录到日志文件中。问题是应用程序似乎崩溃了,我无法处理异常。
例如,我尝试过这样做:
var app = host.Build();
try
{
app.Run();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
但它根本没有命中catch
代码。
我搜索并找到了许多全局异常处理的示例,这些示例似乎处理将用户重定向到错误页面的问题,虽然我可能只是做错了,但我无法让其中的任何一个示例正常工作。
错误消息类似于以下内容:
crit: Microsoft.AspNetCore.Server.Kestrel 无法启动Kestrel。
还有一堆痕迹。通过从命令行运行,我能够看到这个错误,但我的用户不会。这就是为什么我真的希望能够捕捉到这个/记录它。
有人能帮我明白我做错了什么吗?
发布于 2019-06-17 21:36:27
您需要设置.CaptureStartupErrors(false)
。文档这里。
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>();
}
https://stackoverflow.com/questions/56638765
复制相似问题