gpt4 book ai didi

asp.net - 我如何获取错误 500 的日志/调试?

转载 作者:行者123 更新时间:2023-12-05 01:41:25 26 4
gpt4 key购买 nike

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

我目前尝试过:

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

Hosting environment: Production Content root path: C:\Users\pistolon\Downloads\peto Now listening on: http://localhost:13361 Application started. Press Ctrl+C to shut down.

  • 从 startup.cs 文件开始调试。

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

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

最佳答案

您可以使用 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>();

关于asp.net - 我如何获取错误 500 的日志/调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com