Console.SetError(myTextWriter) 什么都不做
Console.SetError(myTextWriter) does nothing
我试图找到一种方法来处理未处理的异常。我找到了下一个 .
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)
已被执行。为什么它什么都不做?
因为我不知道如何实现一个原因,我开始尝试下一个不可思议的事情
- 将
Console.SetError(this)
更改为 Console.SetOut(this)
。
确实有变化。我在浏览器控制台中收到 1000 条错误并且应用程序未启动。
- 将
_decorated = Console.Error
更改为 _decorated = Console.Out
我在浏览器控制台中收到 1000 条信息,但应用程序没有再次启动。
很遗憾,我无法得出任何结论,除了Console.SetError
在WebAssembly中被破坏而Console.SetOut
是可以的。
I check this code, it doesn't change anything
在您发布的版本中,错误会转发给 _decorated.WriteLine(value);
,因此 'no change' 是预期的结果。
但是,当您删除该行时,它们仍然会出现,这很奇怪。我刚用 v3.2 测试过。
except that Console.SetError is broken
不,不是。你可以这样测试
Console.Error.WriteLine($"Current count {currentCount}");
通过您覆盖的 WriteLine 就好了。
但是 according to GitHub 错误现在写入记录器,而不是(直接)写入控制台。自发布其他答案以来,这是一个变化。您可能会在错误之前看到 crit:
,即 LogLevel。
现在我不知道如何重新配置日志记录,这可能是另一个要问的问题。
我试图找到一种方法来处理未处理的异常。我找到了下一个
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)
已被执行。为什么它什么都不做?
因为我不知道如何实现一个原因,我开始尝试下一个不可思议的事情
- 将
Console.SetError(this)
更改为Console.SetOut(this)
。
确实有变化。我在浏览器控制台中收到 1000 条错误并且应用程序未启动。
- 将
_decorated = Console.Error
更改为_decorated = Console.Out
我在浏览器控制台中收到 1000 条信息,但应用程序没有再次启动。
很遗憾,我无法得出任何结论,除了Console.SetError
在WebAssembly中被破坏而Console.SetOut
是可以的。
I check this code, it doesn't change anything
在您发布的版本中,错误会转发给 _decorated.WriteLine(value);
,因此 'no change' 是预期的结果。
但是,当您删除该行时,它们仍然会出现,这很奇怪。我刚用 v3.2 测试过。
except that Console.SetError is broken
不,不是。你可以这样测试
Console.Error.WriteLine($"Current count {currentCount}");
通过您覆盖的 WriteLine 就好了。
但是 according to GitHub 错误现在写入记录器,而不是(直接)写入控制台。自发布其他答案以来,这是一个变化。您可能会在错误之前看到 crit:
,即 LogLevel。
现在我不知道如何重新配置日志记录,这可能是另一个要问的问题。