EventLog
C#と.Netのクラスを使用してWindowsイベントログに書き込むコードで断続的な問題が発生します。
基本的に、このコードは日常的に完全に機能しますが、ごくまれに、次のようなエラーが発生し始めます。
"System.ArgumentException:カスタムログ名の最初の8文字のみが重要であり、指定された名前の最初の8文字を使用する別のログがシステムにすでに存在します。指定された名前:'アプリケーション'、既存のログの名前:'応用'。"
ログの他の情報から、影響を受けるコールスタックは次のようになっていることがわかります-実際に既存のLB_Email
ログに書き込もうとしていることがはっきりとわかります(LogEmail
最初に呼び出されます)。
public static void LogEmail(string to, string type)
{
string message = String.Format("{0}\t{1}\t{2}", DateTime.Now, to, type);
Log(message, "LB_Email", EventLogEntryType.Information);
}
private static void Log(string message, string logName, EventLogEntryType type)
{
using (EventLog aLog = new EventLog())
{
aLog.Source = logName;
aLog.WriteEntry(message, type);
}
}
エラーが発生し始めると、イベントログへのアクセスがLB_Email
何らかの理由でロックされているように見えます。特定のイベントログのプロパティを表示すると、ほとんどの情報がグレー表示されて変更できないことが示され、他のプロセスもそのログにログを記録できないように見えます。ただし、「LB_Error」ログにログを記録し、期待どおりに機能し続けるtry-catchを介して、エラー(上記と同じLogメソッドを使用)が表示されます。
このコードをマルチスレッドアプリケーションから呼び出していますが、上記のコードがスレッドセーフであるかどうかを識別できませんでした。
また、プロセスを強制終了して再起動した後、問題のログが正常に機能していることも確認できます...また、エントリがいっぱいになったときにエントリを再利用するための適切な設定がありました...それは問題ではないと思います。
私はあなたの考えや提案を聞いてみたいです。