質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

1535閲覧

EventのAttributeの意味を教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/02/08 06:03

EventのAttributeの意味を教えてください。
C#, Windows7, Visual Studio 2015 communityでClassを開発しています。
http://blog.okazuki.jp/entry/2014/07/13/000023のコードを参考に、Attributeを追加しています。

//既存のコード
[Event(1, Keywords = Keywords.Lifecycle, Level = EventLevel.Informational, Message = "Process start", Opcode = EventOpcode.Start, Task = Tasks.App)]
public void Start() {
this.WriteEvent(1);
}
[Event(2, Keywords = Keywords.Lifecycle, Level = EventLevel.Informational, Message = "Process stop", Opcode = EventOpcode.Stop, Task = Tasks.App)]
public void Stop() {
this.WriteEvent(2);
}
[Event(3, Keywords = Keywords.Diagnostic, Level = EventLevel.Verbose, Message = "Execute query{0}", Opcode = EventOpcode.Info, Task = Tasks.DB)]
public void Query(string query) {
this.WriteEvent(3, query);
}
//新規のコード
[Event(4, Keywords = Keywords.Date, Level = EventLevel.Verbose, Message = "Execute test DATE{0}", Opcode = EventOpcode.Info, Task = Tasks.App)]
public void showDate(){
this.WriteEvent(4);
}
}

既存コードの下に、新規のコードを追加し、それを呼び出している部分に、
MyEventSource.Log.Start();
MyEventSource.Log.Query("select * from dual");
MyEventSource.Log.showDate();
MyEventSource.Log.Stop();

のように追加しました。
public static class Keywords {
public const EventKeywords Diagnostic = (EventKeywords)1;
public const EventKeywords Lifecycle = (EventKeywords)2;
public const EventKeywords Date = (EventKeywords)4;
}
も追加しました。

しかし、
MyEventSource.Log.showDate();
のみ、なにも出力しません。
[Event(4, Keywords = Keywords.Date, Level = EventLevel.Verbose, Message = "Execute test DATE{0}", Opcode = EventOpcode.Info, Task = Tasks.App)]
public void showDate(){
this.WriteEvent(4);
}

のattribute、またはWriteEvent(4)に問題があるかと思います。
[Event(4, //4は連番? 番号が抜けてもOK? 任意の数値をつけてよいのか?
Keywords = Keywords.Date, //KeywordsはKeywords classに用意すれば任意の文字でOK?
Level = EventLevel.Verbose, //なにを指定すべきか?
Message = "Execute test DATE{0}",
Opcode = EventOpcode.Info, //なにを指定すべきか?
Task = Tasks.App //TaskはTask Classに項目を用意すればなにでもよいのか?
)]

this.WriteEvent(4);//なぜ4? Event(4, と一致させる必要があるのか?
のように、attributeに関して疑問が山積しています。

すっきり解説していただけたらと願っております。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

MyEventSource.Log.showDate()で何も出力されないのは、
Message にパラメータ({0})を指定しているのに、
this.WriteEvent(4);
の呼び出しで、対応するパラメータがないからではないでしょうか?

showDate()
の引数にdateパラメータを追加して、そのパラメーターをWriteEvent(4, date) のように追加してみてください。

投稿2016/02/08 08:26

nishy

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/08 08:50

ありがとうございます。 呼び出し側(Main()で) MyEventSource.Log.showDate("2016/02/08"); [Event(4, Keywords = Keywords.Date, Level = EventLevel.Verbose, Message = "Execute test DATE{0}", Opcode = EventOpcode.Info, Task = Tasks.App)] public void showDate(string message) { this.WriteEvent(4, message); } としてみましたが、変化なしでした。
nishy

2016/02/08 10:09

EnableEvents() を呼び出して、初期化しているところがあると思いますが、第3引数が出力するEventを指定するものとなります。 ここに、Keywords.Date を追加していないのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問