提问者:小点点

Program.cs和Startup.cs中的ASP.NET核心捕获和显示错误


我正在将我的应用程序转移到其他主机上,并有问题设置它。

我创建了空白的ASP.NET Core2.1应用程序,并将其部署到宿主中,并且它可以工作。 之后,我添加了连接字符串到数据库,并尝试从它读取,它也工作。 然后,我将我已经工作的应用程序部署到该主机上,但它没有工作。 我看到的唯一问题是program.csstartup.cs内部有问题,但是如何显示我在这些文件中放置的try/catch错误呢?


共1个答案

匿名用户

您不能在web浏览器中呈现带有错误的HTML页面,因为此时应用程序未正确配置/运行。

正确的方法是调查错误日志,无论它们存储在哪里(取决于您的托管公司)。 如果这是不可能的,也许你可以黑你的方法周围和使应用程序写错误的文本文件在它自己的文件夹。

问题的另一部分,您需要将初始化包装在try/catch块中,以便记录错误。 在serilog.aspnetcore集成页面上有一个很好的示例,可以实现该操作:

using Serilog;

public class Program
{
    public static int Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        try
        {
            Log.Information("Starting web host");
            CreateHostBuilder(args).Build().Run();
            return 0;
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly");
            return 1;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

只需修改此代码即可写入扩展名为serilog.sinks.file的文件。 例子在这里。

var log = new LoggerConfiguration()
    .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();