カスタム EventSource クラスを作成し、次のようにログのメソッドを追加します。
[EventSource(Name = "MyCompany")]
public class MyCompanyEventSource : EventSource
{
[Event(6, Message = "test.", Keywords = Keywords.Perf,
Level = EventLevel.Warning)]
public void Test()
{
this.WriteEvent(6);
}
}
また、SemanticLogging-svc.exe -c を使用してトレース イベント サービスを開始し、このコマンドを実行する前に、SemanticLogging-svc.xml を次のように構成しました。
<eventSource name="MyCompany" level="LogAlways"/>
そして、Test() メソッドの呼び出しを開始します。初めて、flatFileSink は正しいレベルのイベントを警告として記録します。ただし、属性の Test() メソッドのレベルを Critical に変更して Test() メソッドを呼び出した後でも、flatFileSink はレベルを警告として記録します。それは完全に間違っていました!OnNext メソッドのパラメーターである EventEntry のスキーマであることはわかっています。しかし、インプロセス リスナーを使用すると、レベルが Critical に更新される可能性がありますが、これは正しいことです。
では、アウトプロセスを使用している場合、レベルがまだ古いのはなぜですか? それはETWに何か問題がありますか?マシンにキャッシュがあるようです。また、このキャッシュは、パフォーマンス モニターでイベント トレース セッションを停止して削除したり、コンピューターを再起動したりしてもクリアできませんでした。このキャッシュを本当にクリアしたいのですが、その方法がわかりませんでした。
また、Event Attribute の Version を変更したり、EventSource Name を別の名前に変更したりすると、プロセス外のレベルが更新されることがわかっています。しかし、バージョンを変更するのを忘れている可能性があるため、これは良い方法ではないと思います。
それで、誰かが私を助けることができますか?