如何获取错误 500 的日志/调试



我正在开发一个.NET Core 2.0 Web应用程序。我得到了一个模拟数据库,其中应用程序运行良好。今天我创建了一个干净的数据库,并在IIS Express和常规IIS上都收到了此错误500。问题是:我无法调试为什么抛出错误 500。应用程序刚刚运行。

我目前尝试过:

  • 通过激活 IIS 日志来检查 stdoutLogEnabled="true",创建的唯一日志是:

托管环境:生产内容根路径: C:\Users\pistolon\Downloads\peto 现在正在收听: http://localhost:13361 应用程序已启动。按 Ctrl+C 关闭。

  • 从启动.cs文件开始调试。

当我切换回模拟数据库时,它可以正常工作。

你们中的任何人可以指出我在哪里可以获得异常或记录吗?

可以使用事件查看器或 Visual Studio 远程调试来调试已部署的应用程序。

此外,您可以使用像Serilog这样的日志记录框架,并使用其中一个接收器(如文件接收器),并创建一个中间件来捕获和记录您的异常,并将其StackTrace,消息,源写入您可以读取它们的日志文件。

下面是错误处理中间件实现:

public class ErrorHandlingMiddleware
{
    readonly RequestDelegate _next;
    static ILogger<ErrorHandlingMiddleware> _logger;
    public ErrorHandlingMiddleware(RequestDelegate next,
        ILogger<ErrorHandlingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }
    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            await HandleExceptionAsync(context, ex);
        }
    }
    static async Task HandleExceptionAsync(
         HttpContext context,
         Exception exception)
    {
        string error = "An internal server error has occured.";
        _logger.LogError($"{exception.Source} - {exception.Message} - {exception.StackTrace} - {exception.TargetSite.Name}");
        context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        context.Response.ContentType = "application/json";
        await context.Response.WriteAsync(JsonConvert.SerializeObject(new
        {
            error
        }));
    }
}

用法

app.UseMiddleware<ErrorHandlingMiddleware>();

我认为这些信息不足以消除,但是如果您在使用真实数据库时看到 500 错误并且模拟数据库正常工作,我敢打赌您的问题出在连接字符串上。您还可以检查以确保您也处于开发环境中。

更新:您也可以尝试使用应用程序。UseDeveloperExceptionPage();

最新更新