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

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

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

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

Q&A

解決済

2回答

2679閲覧

ETW(Event Tracing for Windows)のlogをtextfileに落としたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2016/02/10 05:32

質問です。
ETW(Event Tracing for Windows)のlogをtextfileに落としたいです。
Windows7, Visual Studio 2015 communityの組み合わせでconsole applicationを作っています。

http://blog.okazuki.jp/entries/2014/07/13
を参考にNuGetして、次のコードを書きました。
これでconsoleには出せるのですが、それをfileにする方法がわかりません。
アドバイスお願いします。

using Microsoft.Practices.EnterpriseLibrary.SemanticLogging;
using Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Formatters;
using System.Diagnostics.Tracing;

// リスナーを作る
var listener = new ObservableEventListener();
// 監視するログの種類を設定
listener.EnableEvents(
MyEventSource.Log,
EventLevel.Verbose,
MyEventSource.Keywords.Diagnostic | MyEventSource.Keywords.Lifecycle);
// ログを出力する
//listener.LogToConsole(new JsonEventTextFormatter()); //JSON形式
listener.LogToConsole();

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

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

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

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

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

guest

回答2

0

listener.LogToFlatFile("LogFile1.txt");

で出来ます。

投稿2016/02/10 15:06

katsumiy

総合スコア479

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

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

退会済みユーザー

退会済みユーザー

2016/02/12 00:22

ご回答ありがとうございます。 早速試してみたのですが、listenerのあとintellisenseでは補足されず、直接 listener.LogToFlatFile("LogFile1.txt"); としても、ObservableEventListenerにはLogToFlatFileがないとエラーです。 なにか参照設定かusingが必要でしょうか? あわせて、外部出力でなく、単にstringとして受け取る方法をご存知でしたら、アドバイスいただけるとうれしいです。
katsumiy

2016/02/12 02:09

Semantic Logging Application Block - Text file sinks というNuget Package がありますので、それを追加参照してください。 Stringで受け取る場合は、以下のblogを参考して、自分のsinkを作ってください。 http://blog.okazuki.jp/entry/2014/07/13/194046
退会済みユーザー

退会済みユーザー

2016/02/12 07:14

NuGetして、LogToFlatFileの動作を確認できました。 ありがとうございます。 続いてのstringですが、参考のサイトを参考に、 public void OnNext(EventEntry value) { string returnstring = ""; if (value == null) return; using (var w = new StringWriter()) { returnstring = "EventId : " + value.EventId.ToString() + ", " + "Level: " + value.Schema.Level + ", " + "Message: " + value.FormattedMessage + ", " + "Payload : " + ", " + //value.Payloadは配列 "EventName: " + value.Schema.EventName + ", " + "Timestamp: " + value.Timestamp.ToString("yyyy - MM - dd HH - MM - ss, fffffff")+ ", " + //2016 - 02 - 12T06: 47:41.4655629Z "ProcessId: " + value.ProcessId + ", " + "ThreadId: " + value.ThreadId.ToString() + "\r\n"; } } でとりあえずstringは作れたもののこれをどう取り出したらよいのかで壁に当たっています。 listenerがデータを受け取ったときに処理をするのだと思いますが、listenerのイベントハンドラを作成できるのか?(できそうにない)、usingしたclassのOnNextのなかのstringをどう取り出すのか、教えていただけないでしょうか。
katsumiy

2016/02/12 08:53

取り出すとかそういう考え方ではないです。OnNext 内で全部処理するんです。 ファイルに書き込むのであれば、そこで書き込むし、SQL DBに書き込むのであればそこで書き込んでます。 自分がなにをしたいのかがわかっていれば、それをOnNext で実行するだけです。
退会済みユーザー

退会済みユーザー

2016/02/15 06:00

なんと、そのOnNextですべて処理するのでしたか。 できました。 長々お付き合いいただき、ありがとうございました。
guest

0

ベストアンサー

面倒ならReactive Extensionを導入して、

listener.Subscribe(x=>{/*xをいい感じに整形して好きなことする処理*/})

としてください。

投稿2016/02/12 09:06

編集2016/02/12 09:08
ozwk

総合スコア13521

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

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

退会済みユーザー

退会済みユーザー

2016/02/15 06:31

Reactive Extensionはすごそうなのですが、導入方法と*xをいい感じに整形して好きなことする処理*/を「まったくわからん」(by草刈正雄@真田丸)なのです。 NuGetできるものでしょうか? というあたりからお願いします。
ozwk

2016/02/15 09:01

nugetから簡単に導入できます。 いい感じに云々はあなたがやりたい事をラムダ式で記述します。
退会済みユーザー

退会済みユーザー

2016/02/16 00:11

ありがとうございます。 nugetは見たのですが、Reactive Extensionで検索しても結果が多数あって判別できませんでした。具体的にどれを入れればよいでしょう?
ozwk

2016/02/16 00:17

rx-mainです
退会済みユーザー

退会済みユーザー

2016/02/16 06:24

ありがとうございます。できました。すごいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問