Console.SetError (myTextWriter) ничего не делает - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь найти способ обработать необработанное исключение. Я нашел следующий Blazor на стороне клиента Обработка исключений на уровне приложения .

services.AddSingleton<ExceptionNotificationService>();
...
public class ExceptionNotificationService : TextWriter
{
    private TextWriter _decorated;
    public override Encoding Encoding => Encoding.UTF8;

    public event EventHandler<string> OnException;

    public ExceptionNotificationService()
    {
        _decorated = Console.Error;
        Console.SetError(this);
    }

    public override void WriteLine(string value)
    {
        OnException?.Invoke(this, value);

        _decorated.WriteLine(value);
    }
}

Я проверяю этот код, он ничего не меняет. Исключения записываются в консоль браузера, метод WriteLine(string value) вообще не выполняется. Я уверен, что Console.SetError(this) казнен. Почему он ничего не делает?

Поскольку я понятия не имею, как понять причину, я начал пробовать следующие сверхъестественные вещи

  1. заменить Console.SetError(this) на Console.SetOut(this).

Он меняет. Я получаю 1000 ошибок в консоли браузера, и приложение не запускается.

изменить _decorated = Console.Error на _decorated = Console.Out Я получаю 1000 информации в Консоли браузера, и приложение не запускается снова.

Жаль, я не могу сделать никаких выводов, кроме Console.SetError не работает в WebAssembly и Console.SetOut в порядке.

1 Ответ

1 голос
/ 12 июля 2020

Я проверяю этот код, он ничего не меняет

В опубликованной вами версии ошибки перенаправляются с помощью _decorated.WriteLine(value);, поэтому ожидаемым результатом является «без изменений». Однако, когда вы удаляете эту строку, они все равно появляются, что странно. Я только что тестировал v3.2.

, за исключением того, что Console.SetError не работает

Нет, это не так. Вы можете протестировать его как

 Console.Error.WriteLine($"Current count {currentCount}");

, который проходит через вашу переопределенную WriteLine.

Но согласно GitHub ошибки теперь записываются в Logger, а не ( напрямую) в Консоль. Это изменение с тех пор, как был опубликован другой ответ. Вы, вероятно, видите перед ошибкой crit:, то есть LogLevel.

Теперь я не знаю, как перенастроить ведение журнала, это может быть еще один вопрос, который нужно задать здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...