Использование неопределенного значения ключевого слова 0x1 для события ApplicationStarted. в EnterpriseLibrary SLAB
Я использую Enterprise Library SLAB для ведения журнала, но всегда, так как несколько дней я получаю ошибкуИспользование неопределенного значения ключевого слова 0x1 для события ApplicationStarted. Он компилируется нормально, но выдает ошибку времени выполнения только тогда, когда мы пытаемся включить событие журнала, используя следующую строку
listener.EnableEvents(Logger.Log, EventLevel.LogAlways, Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Keywords.All)
;
Вот мой источник событий
public static readonly Logger Log = new Logger();
[Event(100, Level = EventLevel.Informational, Keywords = Keywords.Application, Task = Tasks.ApplicationStarted, Opcode = Opcodes.Start, Version = 1)]
public void ApplicationStarted()
{
if (this.IsEnabled(EventLevel.Informational, Keywords.Application))
{
this.WriteEvent(100);
}
}
[Event(101, Level = EventLevel.Informational, Keywords = Keywords.Application, Task = Tasks.ApplicationClosed, Opcode = Opcodes.Closed, Version = 1)]
public void ApplicationClosed()
{
if (this.IsEnabled(EventLevel.Informational, Keywords.Application))
{
this.WriteEvent(101);
}
}
1 ответ
"Каждое значение ключевого слова представляет собой 64-разрядное целое число, которое рассматривается как битовый массив, позволяющий определить до 64 различных ключевых слов".
"Хотя ключевые слова выглядят как перечисление, это статический класс с константами типа System.Diagnostics.Tracing.EventKeywords. Но так же, как и с флагами, вам нужно убедиться, что вы присваиваете степени двух в качестве значения для каждой константы".
"Если вы решите использовать ключевые слова, вы должны определить ключевые слова, которые вы будете использовать во вложенном классе с именем Ключевые слова"
[EventSource(Name = "MyCompany")]
public class MyCompanyEventSource : EventSource
{
public class Keywords
{
public const EventKeywords Page = (EventKeywords)1;
public const EventKeywords DataBase = (EventKeywords)2;
public const EventKeywords Diagnostic = (EventKeywords)4;
public const EventKeywords Perf = (EventKeywords)8;
}
...
}
Та же история с задачами и кодами операций:
"Вы можете использовать параметры Opcodes и Tasks атрибута Event, чтобы добавить дополнительную информацию к сообщению, которое регистрирует источник событий. Opcodes и Tasks определяются с использованием вложенных классов с одинаковыми именами аналогично тому, как вы определяете ключевые слова".
Различия заключаются в следующем: "Кодам операций и задачам не нужно присваивать значения, равные двум степеням". И "Если вы решите определить пользовательские коды операций, вы должны назначить целочисленные значения 11 или выше".
Вы можете прочитать полную статью здесь: