1

私のアプリでは、EventLog を使用しています (お金を扱っているため、発生する可能性のあるすべてのイベントをログに記録する必要があります)。EventLog はうまく機能しますが、問題は、メッセージがあまりにも早く来ることです (1 秒で 3 ~ 5 個のイベントが発生する可能性があります)。
これらのメッセージの後、EventLog で適切に並べ替えることができません (時間で並べ替える必要があります)。問題は、1 秒で 5 つのイベントが発生した場合、これらの 5 つのイベントが EventLog で「ランダムに」ソートされることです。これは、YYYY/MM/DD hh/mm/ss のみを記録しているためですが、ミリ秒を追加する必要があります。それを達成する方法はありますか?

イベントをログに記録する方法の基本的なコード:

    if (!EventLog.SourceExists(EventLogName))
        EventLog.CreateEventSource(ex.Message, EventLogName);
    EventLog log = new EventLog();
    log.Source = EventLogName;
    log.WriteEntry(ex.Message, EventLogEntryType.Error);

WriteEntry の最も正確な属性は次のとおりです。
-string source
-string message
-EventLogEntryType type
-int eventID
-short カテゴリ
-byte[] rawData

しかし、時間が保存される場所はありません。ミリ秒の精度で基本的な Windows EventLog に書き込む方法はありますか?

4

2 に答える 2

1

サードパーティのライブラリを使用できないのはなぜですか? 「Microsoft 以外の」ライブラリの使用を禁止した人と、それが制限であると仮定して、これについて話し合ったことがありますか。そのような包括的な制限を持つことはばかげています。

単純に他のタイムスタンプを取得することはできませんが、いくつかのハックを試すことができます。明らかな方法は、ミリ秒の精度部分 (ログには記録されません) を取得し、EventIDそれをアプリケーション固有のものとして使用することです。そのため、好きなように使用できます。1 秒あたりのイベント数が少ない場合は、イベント ログの日付/時刻での並べ替えで問題ありません。イベントの順序を視覚的に確立できます。

多すぎる場合は、イベント ログを Excel などにエクスポートして、両方の列で並べ替えることができます。

もちろん、もみ殻を減らすために、ソースをフィルタリングすることもできます。

Windows の高速ログを確認することをお勧めします: System.Diagnostics.Tracing.EventSourceを使用する C#/.NET の ETW も同様に役立つ場合がありますが、EventLog にのみログを記録する場合はそうではありません。

基本的に、要件がミリ秒の精度である場合は、Windows イベント ログを使用しないでください。指摘されているように、必要なものを提供する非常に多くのロギング ソリューションがあります。

于 2014-02-15T18:35:27.290 に答える
0

タイムスタンプを記録しているのはイベント ログであるため、ミリ秒の精度を取得できるようには見えません。

log4netのようなものを使用して、標準のテキストベースのログに書き込むほうがよいのではないでしょうか? log4net によって書き込まれたログには、ミリ秒単位の精度だけでなく、エントリを書き込んでいるクラスの ID などの多くの情報があります。スケールアップが必要な場合でも、はるかに高速になる可能性があります。

于 2013-07-01T15:49:24.233 に答える