Nancyのトレース機能
ナンシーのトレース機能について調べてみました。
まずはBootstrapperのサブクラスを作成してトレース機能を有効にします。
using Nancy; using Nancy.Bootstrapper; using Nancy.TinyIoc; using Nancy.Diagnostics; namespace NanNan { public class MyBootstrapper : DefaultNancyBootstrapper { protected override Nancy.Diagnostics.DiagnosticsConfiguration DiagnosticsConfiguration { //ダッシュボードへログインする際のパスワードを設定する必要あり。 get { return new Nancy.Diagnostics.DiagnosticsConfiguration() { Password = @"Abcd@1234" }; } } protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, IPipelines pipelines) { //トレースを有効にする StaticConfiguration.EnableRequestTracing = true; } } }
次にモジュールにトレース処理を組み込みます。
これでモジュールの該当ルートへリクエストが発生する度にトレースされるようになります。
using Nancy; using System; namespace NanNan { public class MyModule : NancyModule { public IndexModule() { Get["/"] = _ => { Context.Trace.TraceLog.WriteLog((s) => { s.AppendFormat("ルートへのアクセス:{0}", System.DateTime.Now.Ticks.ToString()); }); return "hello, root"; }; Get["/aaa"] = _ => { Context.Trace.TraceLog.WriteLog((s) => { s.AppendFormat("aaaへのアクセス:{0}", System.DateTime.Now.Ticks.ToString()); }); return "hello, aaa"; }; } } }
トレースログを確認するには、ダッシュボードへアクセスします。
<アプリケーションURL>/_Nancy でアクセスすることができます。
1,ログインページ
2,ダッシュボードページ。トラッキングメニューを選びます。
3,ユーザーセッション一覧ページ(と思う)
4,セッション内アクセス一覧ページ
5,アクセス時情報出力ページ
ページ下部にトレース情報が出力されます。
全てのルートへのアクセスに対してトレースしたい場合は、Bootstrapperで設定することが可能。
また、パイプラインのOnErrorでエラー時トレースを行うことも可能。
using Nancy; using Nancy.Bootstrapper; using Nancy.TinyIoc; using Nancy.Diagnostics; namespace NanNan { public class MyBootstrapper : DefaultNancyBootstrapper { protected override Nancy.Diagnostics.DiagnosticsConfiguration DiagnosticsConfiguration { //ダッシュボードを有効にする get { return new Nancy.Diagnostics.DiagnosticsConfiguration() { Password = @"Tonkatu@1919" }; } } protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, IPipelines pipelines) { //トレースを有効にする StaticConfiguration.EnableRequestTracing = true; pipelines.BeforeRequest += (ctx) => { //Nullを返すことで、リクエスト処理を以降のパイプラインに任せる。 //ここで意味のあるレスポンスを返すと、リクエスト処理がこの時点で終了する。 ctx.Trace.TraceLog.WriteLog((s) => { s.AppendLine("ビフォーリクエスト!!"); }); return null; }; pipelines.AfterRequest += (ctx) => { ctx.Trace.TraceLog.WriteLog((s) => { s.AppendLine("アフターリクエスト!!"); }); }; pipelines.OnError += (ctx, err) => { ctx.Trace.TraceLog.WriteLog((s) => { s.AppendLine("エラーが発生:" + err.Message); }); //本当はエラーページのViewなどを返す。 return err.Message; }; } } }