gRPCグローバル例外キャプチャ
2461 ワード
gRPCグローバル例外キャプチャ
リード
普通のNetプロジェクト例えばASP.NET、コンソールプログラム、Windowsサービス、デスクトッププログラムなどにはframework独自のグローバル例外キャプチャメカニズムがあります.ASP.NETのExceptionFilterAttribute、コンソールとWindosサービスのAppDomain.CurrentDomain.UnhandledException.ではgRPCの異常捕獲はどのように実現されるのか.
構想
まず私が歩いている回り道を話します.私のgrpcサービスは頼りです.Netのコンソールプログラムは、TopShelfフレームワークを使用してWindowsサービスを作成します.Topshelfが持つグローバル異常の内部実装もAppDomainに対するものである.CurrentDomain.UnhandledExceptionはいくつかのパッケージを作った.しかし,この方式はgRPC内部の異常を捕獲できないことが試験で分かった.では,gRPC内部でグローバルな異常がキャプチャされたと判断したので,コンソールでUnhandledExceptionを使用してはキャプチャできない.その後、gRPCソースコードを確認し、gRPC内部のすべての異常が内部で消化され、ILoggerというログインタフェースに記録されることを発見しました.そのため、コンソールでILoggerインタフェースを実現し、gRPCサービスを初期化するときに宣言すればいいだけです.
インプリメンテーション
まず、gRPC内部のGrpcを実現する.Core.Logging.ILoggerインタフェース
LogUtilは私のプロジェクトのログシステムツールクラスです.ここでは,gRPC内部の異常ログをすべて自分で実現したログシステムに記録し,自分で制御できるようにする.
ForType()は、指定されたタイプのログレコーダを返し、この方法で記録するログをフィルタできます.
2つ目のステップは、このGrpcLoggerクラスをサービス初期化後、サービスが開始される前に宣言することです.
できます.
転載先:https://www.cnblogs.com/ElijahZeng/p/10820756.html
リード
普通のNetプロジェクト例えばASP.NET、コンソールプログラム、Windowsサービス、デスクトッププログラムなどにはframework独自のグローバル例外キャプチャメカニズムがあります.ASP.NETのExceptionFilterAttribute、コンソールとWindosサービスのAppDomain.CurrentDomain.UnhandledException.ではgRPCの異常捕獲はどのように実現されるのか.
構想
まず私が歩いている回り道を話します.私のgrpcサービスは頼りです.Netのコンソールプログラムは、TopShelfフレームワークを使用してWindowsサービスを作成します.Topshelfが持つグローバル異常の内部実装もAppDomainに対するものである.CurrentDomain.UnhandledExceptionはいくつかのパッケージを作った.しかし,この方式はgRPC内部の異常を捕獲できないことが試験で分かった.では,gRPC内部でグローバルな異常がキャプチャされたと判断したので,コンソールでUnhandledExceptionを使用してはキャプチャできない.その後、gRPCソースコードを確認し、gRPC内部のすべての異常が内部で消化され、ILoggerというログインタフェースに記録されることを発見しました.そのため、コンソールでILoggerインタフェースを実現し、gRPCサービスを初期化するときに宣言すればいいだけです.
インプリメンテーション
まず、gRPC内部のGrpcを実現する.Core.Logging.ILoggerインタフェース
public class GrpcLogger : ILogger
{
public ILogger ForType()
{
return this;
}
public void Debug(string message)
{
LogUtil.Debug(message);
}
public void Debug(string format, params object[] formatArgs)
{
LogUtil.Debug(format);
}
public void Error(string message)
{
LogUtil.Error(message);
}
public void Error(string format, params object[] formatArgs)
{
LogUtil.Error(format);
}
public void Error(Exception exception, string message)
{
LogUtil.Error($"{message}:{exception.ToString()}");
}
public void Info(string message)
{
LogUtil.Info(message);
}
public void Info(string format, params object[] formatArgs)
{
LogUtil.Info(format);
}
public void Warning(string message)
{
LogUtil.Warn(message);
}
public void Warning(string format, params object[] formatArgs)
{
LogUtil.Warn(format);
}
public void Warning(Exception exception, string message)
{
LogUtil.Warn($"{message}:{exception.ToString()}");
}
}
LogUtilは私のプロジェクトのログシステムツールクラスです.ここでは,gRPC内部の異常ログをすべて自分で実現したログシステムに記録し,自分で制御できるようにする.
ForType()は、指定されたタイプのログレコーダを返し、この方法で記録するログをフィルタできます.
2つ目のステップは、このGrpcLoggerクラスをサービス初期化後、サービスが開始される前に宣言することです.
GrpcEnvironment.SetLogger(new GrpcLogger());
できます.
転載先:https://www.cnblogs.com/ElijahZeng/p/10820756.html