2


0

Windowsサービスを作成しています。 例外が発生したら、それを適切に処理してログを作成します。 私は デコレータパターンを使っています。人々がこれらのログを見る方法はたくさんあるからです。 私は電子メールロガー、ファイルロガー、そしてWindowsイベントロガーを持っています。これらはすべて、ILoggerを実装するLoggingDecoratorを継承しています。 そのため、他のロガーを認識しているロガーはいません。

私の質問は次のとおりです。ロギング例外をどのように処理すればよいですか。

ファイルへの書き込みに失敗した場合、または電子メールの送信に失敗した場合は、どうすればいいですか。 最初のログの内容を他のロガーと一緒に記録したいのですが、ロギング例外を使用して何をしますか? コンストラクタ内のロガーの順番にも依存しませんか?

今のところ、私はtry / catchブロックを空のcatch(Exception)ステートメントでラップしているだけです。これは単に汚い感じになり、FxCopを怒らせます。 しかし、これは "it依存 "の瞬間の1つですか。

[Flags]
パブリック列挙体LoggingCategories {None = 0、ServiceEvents = 1、ProcessingInformation = 2、ProcessingErrors = 4、UnexpectedErrors = 8}

パブリックインターフェイスILogger {void LogMessage(LoggingCategoriesカテゴリ、文字列メッセージ); }

パブリック抽象クラスLoggerDecorator:ILogger {private ILogger _decoratedLogger;プライベートLoggingCategories _categories;

protected LoggerDecorator(ILoggerロガー、LoggingCategoriesカテゴリ){this._decoratedLogger = logger; this._categories = categories; }

保護されたbool ShouldLogCategory(LoggingCategoriesカテゴリ){return((this._categories

パブリック仮想void LogMessage(LoggingCategoriesカテゴリ、文字列メッセージ){_decoratedLogger.LogMessage(カテゴリ、メッセージ); }

}

パブリッククラスControlLogger:ILogger {public ControlLogger(){}

public void LogMessage(LoggingCategoriesカテゴリ、文字列メッセージ){Console.WriteLine(LoggingHelper.ConstructLog(category、message)); }}

(WindowsEventLoggerの疑わしいコード)

{this._eventLog.WriteEntry(log、type);}をお試しください。 } catch(Exception){//このロギングが失敗した場合でも、それ以降のロギングや処理を中止したくはありません。 }

(サービスコンストラクタ内のコード)

ILogger controlLogger = new ControlLogger(); ILogger windowsEventLogger = new WindowsEventLogger(controlLogger、windowsEventLogCategories、windowsEventLogSource); ILogger emailLogger = new EmailLogger(windowsEventLogger、emailCategories、emailSubject、emailAddresses); ILogger fileLogger = new FileLogger(emailLogger、fileCategories、logDirectory、logFileNamePrefix、logFileExtension);

this._logger = fileLogger;

3 Answer


6


ロガーが失敗した場合、なぜそれを実際のWindowsイベントログに入れないのですか?


1


それは答えではありませんが、なぜあなたが既存のSystem.Diagnostics.Traceメソッドを利用しないことを選んだのか興味があります。 あなたはそれをおそらくそれの上にログタイプの分類のある種のタイプを実装することができますか?


0


非常に信頼性が高いと信頼できる、正常に動作するマシン上に個別のpingサービスを作成します。 あなたの主要なサービスが失敗すると、pingも失敗し、制御サービスは警告を出してあなたにEメールを送るはずです。