はじめに
私がアカデミーの「Studioでのロギング入門(v2021.10)」をやって、下記のツイートをしたところ、
知らなかったっていう人が(私自身も含めて)意外といたので、設定を色々と試してみたものとなります。
前提条件
アカデミーのコースタイトルにもあるように、v2021.10以降が対象だと思われます。
今回試したのは、UiPath Studio 2023.4.0 Community Editionです。
バージョンによって差異がある可能性がありますのでご了承ください。
ワークフローファイルを呼び出しアクティビティについて
ワークフローファイルを呼び出しアクティビティに関する公式ドキュメントはこちら。
簡単に言うと、部品化したサブワークフローを呼び出すアクティビティです。
Main.xamlにワーッと書いていると長くなって可読性が下がります。そこで、意味のあるまとまりで部品化を行います。Main.xamlからは部品化した部分は消し、代わりにワークフローファイルを呼び出しアクティビティでその部品化したサブワークフローの呼び出し部分だけ書けばよくなり、Main.xamlがシンプルになって可読性が上がります。これはMain.xamlに限らず、部品化して作られたxamlからさらに部品化したxamlを作り、呼び出すこともできます。このような部品化は、将来のメンテナンス性にも大きく関わってくるため、ワークフローを開発する人としては、意識して欲しいです。
ログの設定
ワークフローファイルを呼び出しアクティビティのログの設定項目は以下の3項目です。
- ログレベル
- 開始時のログ
- 終了時のログ
ログレベル
[開始時のログ]および[終了時のログ]プロパティにより生成されるメッセージに適用するログレベルです。
設定できる値は、以下の5つです。未設定の場合のデフォルト値は「Info」です。
- Fatal
- Error
- Warn
- Info
- Trace
実際に使う際、ワークフローファイルの[開始時のログ]や[終了時のログ]のログレベルとして、Fatal、Error、Warnを使うことはないと思います。Infoを設定することを推奨します。
開始時のログ
リソースの呼び出し開始時に自動でログに記録する情報の種類です。
設定できる値は、以下の3つです。未設定の場合のデフォルト値は「No」です。
- No
- OnlyInvocation
- WithArguments
- No
- 開始ログを記録しません。
- OnlyInvocation
- 開始ログが記録されます。
- WithArguments
- 開始ログが記録されます。引数の設定内容も記録されます。
開始時のログに引数の設定内容が記録されていることは、エラーなどの原因を探る上で非常に有効です。この機能がないときは、呼び出し先のフローの先頭で、渡された引数を頑張ってログ出力していた人も多いはず。引数が多い場合にログに出力するデータが多くなってしまう問題はありますが、WithArgumentsを設定することを推奨します。
終了時のログ
リリースの呼び出し終了時に自動でログに記録する情報の種類です。
設定できる値は、以下の3つです。未設定の場合のデフォルト値は「No」です。
- No
- OnlySuccessfulReturn
- WithArguments
- No
- 終了ログを記録しません。
- OnlySuccessfulReturn
- フローが正常に終了した場合、終了ログが記録されます。
- WithArguments
- フローが正常に終了した場合、終了ログが記録されます。引数の設定内容も記録されます。
終了時のログに引数(出力)の設定内容が記録されていることは、エラーなどの原因を探る上で非常に有効です。この機能がないときは、呼び出し先のフローの最後で、出力引数を頑張ってログ出力していた人も多いはず。引数が多い場合にログに出力するデータが多くなってしまう問題はありますが、WithArgumentsを設定することを推奨します。
実際のログ出力の確認
以下のワークフローを作成し、実際にログを出力してみました。
何も設定しなかった場合
開始時のログに「No」、終了時のログに「No」を設定した時も同様です。
各行の後半は「…」に置換してあります。
14:19:02.6164 Info {"message":"空のプロセス27 の実行が開始されました。","level":"Information","logType":"Default",…}
14:19:02.8690 Info {"message":"メインの開始","level":"Information","logType":"User",…}
14:19:02.8941 Info {"message":"呼び出し先1の開始","level":"Information","logType":"User",…}
14:19:02.8951 Info {"message":"呼び出し先1の終了","level":"Information","logType":"User",…}
14:19:02.9091 Info {"message":"メインの終了","level":"Information","logType":"User",…}
14:19:02.9146 Info {"message":"空のプロセス27 の実行が終了しました。","level":"Information","logType":"Default",…}
シンプルな設定
ログレベルに「Info」、開始時のログに「OnlyInvocation」、終了時のログに「OnlySuccessfulReturn」を設定。
14:31:48.4397 Info {"message":"空のプロセス27 の実行が開始されました。","level":"Information","logType":"Default",…}
14:31:48.8290 Info {"message":"メインの開始","level":"Information","logType":"User",…}
14:31:48.8669 Info {"message":"ワークフロー ファイル '呼び出し先1.xaml' の呼び出しを開始しました。","level":"Information","logType":"User",…}
14:31:48.8844 Info {"message":"呼び出し先1の開始","level":"Information","logType":"User",…}
14:31:48.8872 Info {"message":"呼び出し先1の終了","level":"Information","logType":"User",…}
14:31:48.9033 Info {"message":"ワークフロー ファイル '呼び出し先1.xaml' の呼び出しが終了しました。","level":"Information","logType":"User",…}
14:31:48.9044 Info {"message":"メインの終了","level":"Information","logType":"User",…}
14:31:48.9096 Info {"message":"空のプロセス27 の実行が終了しました。","level":"Information","logType":"Default",…}
引数も表示する設定
ログレベルに「Info」、開始時のログに「WithArguments」、終了時のログに「WithArguments」を設定。
呼び出し先1.xamlの引数はこんな感じです。
仕様は以下の通り。
- 入力_1の文字列に「っす」を付けて、出力_1として返す。
- 入出力_1の文字列に「っちゃ」を付けて、入出力_1として返す。
17:13:08.9261 Info {"message":"空のプロセス27 の実行が開始されました。","level":"Information","logType":"Default",…}
17:13:09.1485 Info {"message":"メインの開始","level":"Information","logType":"User",…}
17:13:09.1669 Info {"message":"ワークフロー ファイル '呼び出し先1.xaml' の呼び出しを開始しました。 引数 '{\"入力_1\":\"入力\",\"入出力_1\":\"入出力\"}'","level":"Information","logType":"User",…}
17:13:09.1860 Info {"message":"呼び出し先1の開始","level":"Information","logType":"User",…}
17:13:09.1883 Info {"message":"呼び出し先1の終了","level":"Information","logType":"User",…}
17:13:09.1986 Info {"message":"ワークフロー ファイル '呼び出し先1.xaml' の呼び出しが終了しました。 引数 '{\"入出力_1\":\"入出力っちゃ\",\"出力_1\":\"入力っす\"}'","level":"Information","logType":"User",…}
17:13:09.1997 Info {"message":"メインの終了","level":"Information","logType":"User",…}
17:13:09.2056 Info {"message":"空のプロセス27 の実行が終了しました。","level":"Information","logType":"Default",…}
見て分かると思いますが、
開始時のログには、「入力」と「入力/出力」のもののみが、
終了時のログには、「出力」と「入力/出力」のもののみが出力されます。
これ、些細なことかもしれませんが、とってもありがたいと思いません?
注意点
引数に配列やデータテーブルがある場合、「WithArguments」が設定されていると、配列やデータテーブルの中身がすべてログに展開され、ログファイルのサイズが爆発的に大きくなります。これらが引数に使われている場合は、「WithArguments」を使わない方が良いです。
まとめ
「ワークフローファイルを呼び出し」アクティビティのログ設定は、簡単な設定だけで、呼び出し先の開始・終了ログを書くことができます。これまで地道に「メッセージをログ」で書いていた方は、ぜひ活用頂きたいです。また、これまであまりログを書いていなかった方は、これを機にログについてアカデミーで学習してみてはいかがでしょうか。