1

Message Filesを使用しない方法を探しています。これに伴う混乱は避けたいからです。

次のような方法を使用してイベントを記述できるようにしたいと思います

public void WriteEvent(EventLogEntryType type, string description, int eventId, int categoryId)

そして、これらのカテゴリを同じクラスで指定して、EventSource をいくつかの列挙型に登録します。

ありがとう!

4

1 に答える 1

0

残念ながら、これは不可能です。

私が言及したそのブログ投稿以降、API に関しては少し変わったとはいえ、原則は同じままです。ドキュメント + サンプルを参照してください。

https://msdn.microsoft.com/en-us/library/650k61tw(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventinstance.categoryid(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventloginstaller.categoryresourcefile(v=vs.100).aspx

これに対する許容できる回避策を見つけました。categoryId の代わりに別のソース ID を使用してください。よりシンプルで、シンプルな API で実行できます。

例: イベント ソースを独自に管理し、カテゴリ タイプごとにイベント ソースを作成します。実行するなど、いくつかの遅延作成ロジックを使用します

if (!EventLog.SourceExists(sourceName))
{
    lock (_eventSourceCreationLock)
    {
        if (!EventLog.SourceExists(sourceName))
        {
            EventLog.CreateEventSource(sourceName, _logName);
        }
    }
}

次に、これを使用して、ソースごとに各ログ エントリを書き込みます。

EventLog.WriteEntry(sourceName, description, type, id);

これらのサンプルは、静的呼び出しによって新しい内部イベント ログが作成されるため、スレッド セーフでもあります。

EventLog のインスタンス メソッドは、スレッド セーフであるとは限りません。

于 2016-03-28T10:47:13.830 に答える