Как правильно определить ключевые слова в Microsoft.Diagnostics.Tracing.EventSource?

Я использую пакет nuget https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource для записи событий в журнал событий. При определении ключевых слов в моем пользовательском классе, наследуемом от EventSource, вот так:

public class Keywords
{
    public const EventKeywords Page = ( EventKeywords ) 0x1;
    public const EventKeywords DataBase = ( EventKeywords ) 0x2;
    public const EventKeywords Diagnostic = ( EventKeywords ) 0x4;
    public const EventKeywords Perf = ( EventKeywords ) 0x8;
}

Я получаю файл манифеста, содержащий следующий XML:

<keywords>
    <keyword name="DataBase" message="$(string.keyword_DataBase)" mask="0x1"/>
    <keyword name="Page" message="$(string.keyword_Page)" mask="0x2"/>
    <keyword name="Diagnostic" message="$(string.keyword_Diagnostic)" mask="0x4"/>
    <keyword name="Perf" message="$(string.keyword_Perf)" mask="0x8"/>
    <keyword name="Session3" message="$(string.keyword_Session3)" mask="0x100000000000"/>
    <keyword name="Session2" message="$(string.keyword_Session2)" mask="0x200000000000"/>
    <keyword name="Session1" message="$(string.keyword_Session1)" mask="0x400000000000"/>
    <keyword name="Session0" message="$(string.keyword_Session0)" mask="0x800000000000"/>
</keywords>

Я не понимаю, откуда берутся ключевые слова сеанса. Это довольно раздражает, потому что эти магически созданные ключевые слова появляются в журнале событий, когда я использую этот код для генерации события:

[Event( 202, Message = "Writing Eventlog With keywords etc. {0}", Level = EventLevel.Verbose, Keywords = Keywords.Perf, Task = EventTask.None, Opcode = EventOpcode.Info, Channel = EventChannel.Debug )]
public void DebugWithKeywordEtc( string message )
{
    this.WriteEvent( 202, message );
}

Ключевые слова зарегистрированного сообщения прочитаны Session0,Session1,Session2,Session3,Perf, который выводится из значения ключевых слов в xml события <Keywords>0x4000f08000000000</Keywords>,

Я уже сам создал файл манифеста (используя ecmangen), и в этом манифесте раздел ключевых слов выглядит следующим образом

<keywords>
    <keyword name="DataBase" message="$(string.keyword_DataBase)" mask="0x1"/>
    <keyword name="Page" message="$(string.keyword_Page)" mask="0x2"/>
    <keyword name="Diagnostic" message="$(string.keyword_Diagnostic)" mask="0x4"/>
    <keyword name="Perf" message="$(string.keyword_Perf)" mask="0x8"/>
</keywords>

что приводит к этому событию xml: <Keywords>0x8000000000000001</Keywords>, Этот результат отображается отлично.

1 ответ

EventSource автоматически определяет и резервирует эти ключевые слова для собственного использования. К сожалению, я не знаю, как отключить это поведение.

Другие вопросы по тегам