【Dynamics CRM】【Plugin】【7.1新機能】Pluginトレースログ
Dynamics CRM7.1(2015SP1)からPluginのトレースログを簡単に残すことができる機能が追加されました。
今までは
・同期Pluginの場合、例外発生ダイアログが表示され、そこからエラーログをダウンロードする、
・非同期Pluginの場合、システムジョブのPluginのレコードにTraceログが記載されていく、
といった形でのログ採取しかできませんでした。
同期の場合、エンドユーザーにログを採取してもらう必要があったりして、結構面倒だったものです。
それが、トレースログの機能によりとても簡単にかつログが採取しやすくなっています。
Pluginトレースログ機能の有効化
初期状態ではトレースログ機能は有効化されていません。
[設定]→[管理]→[システムの設定]を開き
[カスタマイズ]タブの[プラグインおよびユーザー定義ワークフロー活動の追跡]を変更します。
設定できるのは[オフ][例外][すべて]の3種類です。
名前の通りですが、[例外]は例外が発生したときのみトレースログが生成され、[すべて]はすべてのPlugin実行分トレースログが生成されていくというものです。
個人的に[すべて]は開発、テスト、UATの際に。
[例外]を運用開始後、かなぁと思っています。
テストコード
というわけで、実際にトレースログを生成してみました。
環境はもちろん7.1の日本(crm7)
今回特に必要ないと思われますが、SDKも7.1engで.net4.5.2を利用しました。
SDK7.1では4.5.2以上でしか利用できませんのでご注意ください。
コードは単純にトレースログを生成するだけのものです。
StepはAccountエンティティのCreate時に登録しました。
using System; using Microsoft.Xrm.Sdk; namespace CrmProject.Plugin { public class PluginTrace : IPlugin { public void Execute(IServiceProvider serviceProvider) { var trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); trace.Trace("Trace Log Start"); var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); trace.Trace("Target Filed Name : " + ((Entity)context.InputParameters["Target"]).Attributes["name"].ToString()); trace.Trace("Trace Log End"); } } }
Pluginの登録(Plugin)方法は特に変わりありません。PluginRegistrationも特に変わっていないみたい? です。
実行結果
トレースログは[設定]→[プラグイントレースログ]に生成されていきます。
非同期で生成される? のか、作成されるまでに5秒ほどかかった感じです。
レコードの中身は下記のようになっていて、とても素晴らしいです。
特に、開始時刻とともに実行時間が取得できるところが素晴らしい!
要望を言えば、コールしたユーザー情報と実行レコードへの関連付けがあるとうれしいですね。(Guidはあるので、なんとかできますが)
一番下のところには、ITracingServiceのTraceが記載されています。
これで、同期Pluginのログ取得も困りませんね。
例外発生時のログ
ちなみに、例外発生時は下記のような形で例外メッセージとともにログが出力されます。
注意点
そういえば、2015のSDKでは下記問題がありました。
2015SP1アップデートに伴い、SDKも更新されましたが、残念ながら上記問題は解決していませんので、[ja-jp]フォルダを削除するなり、なんとかしてください。