처리되지 않은 예외를 처리하는 방법을 찾으려고합니다. 다음 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)
그것이 실행되었다고 확신합니다 . 왜 아무것도하지 않습니까?
이유를 어떻게 알지 모르기 때문에 다음 기괴한 일을 시도하기 시작했습니다
Console.SetError(this)
하십시오 Console.SetOut(this)
.그것은 변화합니다. 브라우저 콘솔에서 1000 개의 오류가 발생하고 응용 프로그램이 시작되지 않았습니다.
_decorated = Console.Error
에 _decorated = Console.Out
나는 브라우저 콘솔에서 1000 개 정보를 정기적으로 얻을 수 및 응용 프로그램이 다시 시작되지 않습니다.유감 입니다. Console.SetError
WebAssembly에서 깨져서 괜찮다는 것을 제외하고 는 어떤 결론도 내릴 수 없습니다 Console.SetOut
.
이 코드를 확인하면 아무것도 변경되지 않습니다.
게시 한 버전에서 오류가 전달 _decorated.WriteLine(value);
되므로 '변경 없음'이 예상되는 결과입니다.
그러나 해당 줄을 제거해도 여전히 표시되는 것은 이상합니다. 방금 v3.2로 테스트했습니다.
Console.SetError가 깨 졌다는 점만 제외하면
아니, 그렇지 않습니다. 다음과 같이 테스트 할 수 있습니다.
Console.Error.WriteLine($"Current count {currentCount}");
재정의 된 WriteLine을 통과합니다.
그러나 GitHub에 따르면 오류는 이제 콘솔에 (직접) 기록되는 것이 아니라 Logger에 기록됩니다. 다른 답변이 게시 된 이후로 변경되었습니다. 당신은 아마보고 crit:
그 로그 레벨입니다, 당신의 오류 전에.
이제 로깅을 재구성하는 방법을 직접 알지 못합니다. 여기에서 물어볼 또 다른 질문 일 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다