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

时间:2019-01-26 22:24:20

标签: asp.net asp.net-mvc iis asp.net-core .net-core

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

我目前正在尝试:

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

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

  • 从启动startup.cs文件进行调试。

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

你们中的任何人都可以指出我可以在哪里获得例外情况或为此登录吗?

2 个答案:

答案 0 :(得分:3)

您可以使用Event ViewerVisual Studio Remote Debugging来调试已部署的应用程序。

此外,您可以使用Serilog之类的日志记录框架,并使用file sink之类的接收器,并创建一个中间件来捕获并记录您的异常,并将其StackTrace,Message和Source写入日志您可以阅读的文件。

这是ErrorHandlingMiddleware的实现:

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>();

答案 1 :(得分:2)

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

更新:您也可以尝试使用app.UseDeveloperExceptionPage();