4

I am using Enterprise Library SLAB for Logging but always since coupel of days I am getting error Use of undefined keyword value 0x1 for event ApplicationStarted. It is compiling fine but throwing runtime error just when we try to enable log event using following line

listener.EnableEvents(Logger.Log, EventLevel.LogAlways, Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Keywords.All);

Here is my eventsource

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);
            }
        }
4

1 に答える 1

7

「各キーワード値は 64 ビット整数であり、ビット配列として扱われ、最大 64 個の異なるキーワードを定義できます。」

「Keywords は列挙型のように見えますが、System.Diagnostics.Tracing.EventKeywords 型の定数を持つ静的クラスです。ただし、フラグと同様に、各定数の値として 2 の累乗を割り当てる必要があります。」

"キーワードを使用する場合は、 Keywordsというネストされたクラスで使用するキーワードを定義する必要があります"

[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パラメータを使用して、イベント ソースがログに記録するメッセージに追加情報を追加できます。Opcodes および Tasks は、キーワードを定義する方法と同様の方法で、同じ名前のネストされたクラスを使用して定義されます」

違いは次のとおりです。「オペコードとタスクには、2 の累乗である値を割り当てる必要はありません。」また、「カスタム オペコードを定義する場合は、11 以上の整数値を割り当てる必要があります。」

ここで記事全文を読むことができます:

https://msdn.microsoft.com/en-us/library/dn440729.aspx

于 2015-02-01T14:43:41.400 に答える