Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何获取错误日志/调试500?_Asp.net_Asp.net Mvc_Iis_Asp.net Core_.net Core - Fatal编程技术网

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

Asp.net 如何获取错误日志/调试500?,asp.net,asp.net-mvc,iis,asp.net-core,.net-core,Asp.net,Asp.net Mvc,Iis,Asp.net Core,.net Core,我正在开发一个.NETCore2.0Web应用程序。我得到了一个模拟数据库,应用程序运行良好。今天我创建了一个干净的数据库,在IIS Express和普通IIS上都出现了这个错误。 问题是:我无法调试为什么抛出错误500。应用程序刚刚运行 我目前已尝试: 通过激活stdoutLogEnabled=“true”检查IIS日志,创建的唯一日志是: 托管环境:生产内容根路径: C:\Users\pistolon\Downloads\peto正在收听: 应用程序已启动。按Ctrl+C组合键关闭 从

我正在开发一个.NETCore2.0Web应用程序。我得到了一个模拟数据库,应用程序运行良好。今天我创建了一个干净的数据库,在IIS Express和普通IIS上都出现了这个错误。 问题是:我无法调试为什么抛出错误500。应用程序刚刚运行

我目前已尝试:

  • 通过激活stdoutLogEnabled=“true”检查IIS日志,创建的唯一日志是:
托管环境:生产内容根路径: C:\Users\pistolon\Downloads\peto正在收听: 应用程序已启动。按Ctrl+C组合键关闭

  • 从startup.cs文件开始调试
当我切换回模拟数据库时,它可以正常工作

你们中有人能告诉我在哪里可以获得此异常或日志吗?

您可以使用或调试部署的应用程序

此外,您还可以使用日志框架(如)和其中一个接收器(如),创建一个中间件,用于捕获和记录异常,并将它们的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
        }));
    }
}
公共类错误处理中间件
{
readonly RequestDelegate\u next;
静态ILogger\u记录器;
公共错误处理中间件(RequestDelegate next,
ILogger(记录器)
{
_下一个=下一个;
_记录器=记录器;
}
公共异步任务调用(HttpContext上下文)
{
尝试
{
等待下一步(上下文);
}
捕获(例外情况除外)
{
等待HandleExceptionAsync(上下文,例如);
}
}
静态异步任务HandleExceptionAsync(
HttpContext上下文,
例外情况(例外情况)
{
string error=“发生了内部服务器错误。”;
_logger.LogError($“{exception.Source}-{exception.Message}-{exception.StackTrace}-{exception.TargetSite.Name}”);
context.Response.StatusCode=(int)HttpStatusCode.InternalServerError;
context.Response.ContentType=“应用程序/json”;
wait context.Response.WriteAsync(JsonConvert.SerializeObject)(新
{
错误
}));
}
}
用法

app.UseMiddleware<ErrorHandlingMiddleware>();
app.UseMiddleware();

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


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

app.UseDeveloperExceptionPage();为我工作,谢谢!我可以看到错误并对其进行调试。只是想说,我花了14分钟才找到解决问题的方法。谢谢我花了一整天在这上面!