私のソリューションにはいくつかのプロジェクトがあり、そのほとんどは Windows サービスです。それぞれに log4net を構成し (それぞれに個別のログ ファイルを生成)、log4net 用の Raygun アペンダーも用意しました。これらのプロジェクトごとに UnhandledException をキャッチし、それらがどこから発生したか (ログ ファイルと raygun ダッシュボードの両方) の情報を取得したいと考えており、ソリューション内のすべてのプロジェクトに対して 1 か所でこれを実行したいと考えています。
したがって、これらの例外をログに記録する別の静的クラスとメソッドを作成しました。
Logger 静的クラスではなく、そのエラーを生成したクラスがログ ファイルに表示されるように、例外をログに記録するにはどうすればよいですか (また、raygun.io ダッシュボードに例外の適切な発生源を表示させることもできます) =>
Logger.UnhandledException [エラー] - これは間違っています。例外が発生した場所のクラス名にする必要があります
このためにスレッドセーフなシングルトンを作成しますか? これは正しいアプローチですか?
静的クラス:
public static class Logger
{
private static readonly ILog Log = LogManager.GetLogger(Assembly.GetEntryAssembly().FullName);
public static void UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Log.Error(e);
}
}
Windows サービス:
private static void Main(string[] args)
{
Configure.Serialization.Xml();
// Unhandled exceptions - subscribe to the event (I would do this to all my projects in the solution)
AppDomain.CurrentDomain.UnhandledException += Logger.UnhandledException;
}