控制台.SetError(myTextWriter)不执行任何操作



我试图找到一种处理未处理异常的方法。我发现了下一个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个错误,应用程序未启动。

  1. _decorated = Console.Error更改为_decorated = Console.Out我在浏览器控制台中得到了1000个信息,应用程序没有再次启动

很遗憾,我不能得出任何结论,除了Console.SetError在WebAssembly中坏了,Console.SetOut还可以。

我检查了这个代码,它没有改变任何

在您发布的版本中,错误将转发给_decorated.WriteLine(value);,因此"无更改"是预期结果
但是,当您删除该行时,它们仍然会出现,这很奇怪。我刚刚用v3.2进行了测试。

除了控制台。SetError已损坏

不,不是。你可以像一样测试它

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

通过重写的WriteLine的。

但根据GitHub的说法,错误现在被写入Logger,而不是(直接(写入控制台。这是另一个答案发布后的变化。您可能会在出现错误之前看到crit:,即LogLevel。

现在我不知道如何重新配置日志记录,这可能是这里要问的另一个问题。

相关内容

  • 没有找到相关文章

最新更新