Как я могу получить логи / отладку для ошибки 500? - PullRequest
0 голосов
/ 27 января 2019

Я работаю над веб-приложением .NET Core 2.0. Я получил поддельные базы данных, где приложение работает хорошо. Сегодня я создал чистую базу данных и получил эту ошибку 500 как на IIS Express, так и на обычном IIS. Дело в том, что я не могу отладить, почему выдает ошибку 500. Приложение просто запускается.

Я сейчас пробовал:

  • Проверьте журналы IIS, активировав stdoutLogEnabled="true", и единственный созданный журнал был:

Среда размещения: корневой путь к производственному контенту: C: \ Users \ pistolon \ Downloads \ peto Сейчас слушают: http://localhost:13361 Приложение запущено. Нажмите Ctrl + C, чтобы выключить.

  • Отладка при запуске файла startup.cs.

Когда я переключаюсь обратно на смоделированную дб, она работает без ошибок.

Кто-нибудь из вас мог бы указать мне, где я могу получить исключение или войти для этого?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Я не верю, что этой информации достаточно, чтобы уйти, однако, если вы видите ошибку 500 при использовании реальной базы данных и база данных фиктивного режима работает должным образом, я бы поспорил, что ваша проблема связана со строкой подключения,Вы также можете проверить, что вы находитесь в среде разработки.

Обновление: вы также можете попробовать использовать app.UseDeveloperExceptionPage ();

0 голосов
/ 27 января 2019

Вы можете использовать Просмотр событий или Удаленная отладка Visual Studio для отладки развернутых приложений.

Кроме того, вы можете использовать каркас журналирования, например Serilog и используйте один из этих приемников, таких как приемник файлов , и создайте промежуточное программное обеспечение, которое перехватывает и регистрирует ваши исключения и записывает их 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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...