Automation Anywhere / A360 でクライアント側のログを保存する

# 概要や前提

Automation Anywhere A360 (旧A2019）の、クライアント端末（Bot Agent）のログ出力設定や、保存方法について記載します。~~特に保存方法、あんまり誰も教えてくれないので。~~
製品名が長いので、この記事では以後、「A360」とだけ書きます。

:::note warn
Automation Anywhere 11シリーズの話ではないので、そちらを使ってる人は、混乱しないよう、まわれ右でお願いします。
:::

## A360のクライアント側ログについて

特に設定の変更とかしていなければ、`C:\ProgramData\AutomationAnywhere\BotRunner\Logs` にログファイルは保存されています。
`C:\ProgramData`は隠しフォルダなので、エクスプローラの設定で表示するよう変えときましょう。

フォルダの中は、下の3つは、ほぼ必ずあります。

- 過去のログをzipにしたフォルダ（日本語環境だと、`2022-5月` みたいなフォルダ名になっていると思います）
- `Bot_Launcher.log`
- `Node_Manager.log`

他に、利用状況によって、ブラウザ拡張関連のログの、

- `AAChromeBotBrowserAgent.log`
- `AAEdgeBotBrowserAgent.log`
- `AAFirefoxBotBrowserAgent.log`

Bot起動にトリガーを使う時の、トリガー待機の記録になる、

- `TriggerListener.log`

があります。

`Node_Manager-(数字).json` もありますが、これはログの一時ファイルみたいなものらしく、それの中身をいちいち見ることはない、と思います。そもそも詳細な仕様が不明です。

### ログの種類

上にログの一覧を書きました。ここで用途の説明が必要なのは、Node_ManagerとBot_Launcherでしょう。

ざっくりとですが、用途は、以下のような区別になります。

|ログファイル|用途|
|:--|:--|
|Node_Manager.log|Control Roomとの通信状況、Botの開始と終了など|
|Bot_Launcher.log|Bot自体の実行ログ（どんな処理をしたか、など）|

Botを開発するときに、うまく動かないでログを見るなら、Bot_Launcher.logを見ると有意義なことが多いです。
逆に、スケジュール起動がうまくいかない、みたいなケースだったら、Node_Manager.logを見ると、何か出ているかもしれません。（何も出ていなければ、それはそれで、Control Room側の問題の可能性が高いね？って言えます）

## ログが必要となるケース

ログが必要になるのは、大別して、2つのケースが考えられます。

1. Botの運用や実行でトラブルが起きて、原因や詳細を調査するために遡る
1. Botの開発途中で、意図した動きをしないので、原因を調査するためにログを見る

有償版を使っていて、Technical SupportやProfessional Serviceのお世話になる場合も、「ログ取ってください」と言われることは多いです。特に 1. のケース。

A360は設計思想とか性質上、あまりユーザーが2.のパターンでログを見ることを想定していないのかな？というフシもあるのですが、Bot開発を煮詰めてくると、意外と役に立つので、ログに目を通す方法は知っておいて損はないです。

## ログの出力レベル（概要）

変更方法は後述しますが、ログには「出力レベル」という概念があります。
出力レベルの設定によって、「エラーの通知しか記録しない」「一般的な情報までは記録する」「めっちゃ細かいことも保存する」のような、ログに出す要素を設定できます。

細かい情報まで出力することの、メリットとデメリットを記載します。

- メリット
   - 何かトラブルがあった際、原因究明が容易になる
- デメリット
   - PCの処理リソース（CPUやI/O）をログに割かれる分、実行が遅くなる（影響度合いはcase by case）
   - ストレージ（記録容量）を圧迫する
   - 細かく出し過ぎると、逆に重要な情報を探す際に邪魔になる

と、一見、デメリットのほうが多く見えちゃったりします。なので「全部出しておけばいいや」はあまり正しくなくて、必要な時に必要なモノを出すことが望ましいです。

ログ出力レベルの変更や、設定の種類については後述しますので、あくまで「出力レベルという概念があって、設定によってログに出てくる細かさが違う」ということだけ、ここでは頭にいれて先に進んでください。


# ログを保存・確認するには

ここから先、具体的な手順を書きます。

## 止まるんじゃねえぞ、じゃなくて止めろ

この記事のキモの部分になるのですが、A360のクライアント側のログは、普通、クライアントで動いているサービス（Automation Anywhere Bot Agentサービス）のプロセスによって「使用中」状態になっています。
なので、そのままでは正常に開くことすらままならないのです。ではどうすれば良いのかというと、**ログを保存する時や、確認する前段階として、いったんサービス（Bot Agent）を止める**必要があります。

### 前提条件

だいたいの場合、Windows 10を使用していると思うので、その前提で書きます。Windows 11でもさほど変わらないはずです。

あと、**ローカルPCの管理者権限が必須**です。

:::note
実のところ、下に記載している止め方は一例で、タスクマネージャーの「サービス」タブから止める、とかでも全然OKです。やりやすい方法でやっちゃいましょう。
:::

### Bot Agentサービスの止め方

1. スタートボタンを右クリックして、`Windows PowerShell (管理者)` を開きます。
1. (ユーザーアカウント制御のダイアログが表示されたら) 「はい」を押します
1. `net stop "Automation Anywhere Bot Agent"` と入力してEnterします（コピペOK）
1. `Automation Anywhere Bot Agent サービスは正常に停止されました。` と表示されたら完了です。

### Bot Agentサービスの再開

詳細は後述しますが、サービスを止めたら、再開する必要もあります。再開しないとBot Agentが動かない、つまりA360のクライアント側での機能が使えなくなります。

再開手順は、

1. スタートボタンを右クリックして、`Windows PowerShell (管理者)` を開きます。
1. (ユーザーアカウント制御のダイアログが表示されたら) 「はい」を押します
1. `net start "Automation Anywhere Bot Agent"` と入力してEnterします（コピペOK）
1. `Automation Anywhere Bot Agent サービスは正常に開始されました。` と表示されたら完了です。

サービスを止めた後、PowerShellウィンドウを開きっぱなしにしておけば、上記 3. からで再開できます。簡単ですね。

**net stop** で止めて、**net start** で再開。わかりやすいです。

## ログ保存を含めた、具体的な作業手順

サービスの止め方・再開方法を把握したところで、具体的な作業方法を記載します。

### Case.1 障害が起きたのでログを保存しておきたい

1. Bot Agentのサービスを止めます
1. ログの保存先にあるファイル・フォルダを、全部、別のフォルダにコピーします（移動でも可）
1. Bot Agentのサービスを再開します
1. 手順 2.で保存したログを確認したり、詳しい人に見てもらいます

### Case.2a 開発中のBotがうまく動かない

1. Bot Agentのサービスを止めます
1. ログの保存先にあるファイル・フォルダを、全部、別のフォルダに**移動**します。
1. Bot Agentのサービスを再開します
1. 開発中のBotをControl Roomから実行します
1. 実行が終わった（あるいはエラーで終了した）ら、再度、Bot Agentのサービスを止めます
1. ログの保存先にあるファイルやフォルダ（実行中に出力されたログ）を、**手順2.とは別のフォルダに**移動またはコピーします。
1. Bot Agentのサービスを再開します
1. 手順6.で保存したログを確認したり、詳しい人に見てもらいます

上記の、手順 2. での保存は、いわばログフォルダの初期化（手順4.で実行したログに限定する）ためなので、開発にしか使わない端末等で、過去のログが不要というなら、削除でも良いのですが。
とはいえ、消してしまったモノは戻せないので、念のため保存しておくことを強くお勧めします。

### Case.2b 開発中のBotがうまく動かない(詳細なログを取るver.)

1. Bot Agentのサービスを止めます
1. ログの保存先にあるファイル・フォルダを、全部、別のフォルダに**移動**します。
1. ログの出力レベルが詳細な出力になるように変更します（設定方法は後述です）
1. Bot Agentのサービスを再開します
1. 開発中のBotをControl Roomから実行します
1. 実行が終わった（あるいはエラーで終了した）ら、再度、Bot Agentのサービスを止めます
1. ログの保存先にあるファイルやフォルダ（実行中に出力されたログ）を、**手順2.とは別のフォルダに**移動またはコピーします。
1. ログの出力レベルを元に戻します（設定方法は後述ですよー）
1. Bot Agentのサービスを再開します
1. 手順7.で保存したログを確認したり、詳しい人に見てもらいます

手順が長くなってますが、要は

- Bot Agentを止めないとログの移動やコピーは正常にできない
- 関係ない時間帯の情報が含まれないほうがログは確認しやすい

という条件をクリアするためなので、あまり深く考えず、ポチポチやっちゃってください。

### Case.3 障害がたまに起きるので、ログの出力レベルを変更しておくよう言われた

1. Bot Agentのサービスを止めます
1. ログの出力レベルが詳細な出力になるように変更します（設定方法は後述です）
1. Bot Agentのサービスを再開します

これで問題事象が確認されたら、Case.1の手順で保存すればOKです。

## ログの出力レベルについて

ここまでの文章で何カ所か触れた、出力レベルの話です。

A360のBot Agentログは、6つのカテゴリー（レベル）があります。

1. **FATAL** 致命的なナニカがあった時に出力されます。
1. **ERROR** 実行が止まった等、重大なエラーで出力されます。
1. **WARN** 実行は継続できるけど、マズいことがあった時に出力されます。
1. **INFO** 一般的な情報です。Botの実行を開始しました、終了しました、等。
1. **DEBUG** Bot Agentの内部動作など、デバッグ用の情報です。Botが問題なく動いているときは不要な情報です。
1. **TRACE** 各パッケージの内部動作に関する情報など、めっちゃ細かく逐一出力されます。

さて、Bot Agentをインストールした後の初期設定では、「INFO以上を出力」になっています。
ですが、用途や状況によっては「DEBUGもほしい」とか「TRACEが必要」なんてことがあります。

Bot開発中のエラーを開発者がチェックするなら、INFOだとちょっと情報不足で、DEBUGを出せば事足りるように思えます。
他方で、障害が起きたときの再現調査や、挙動不審な時の確認などは、TRACEも取ってください、って言われたりします。なので設定値は「どれが正しい」ではなく、用途や状況によって切り替えると良いはずです。

一般論として、たとえば「FATALとINFOは取るけど、WARNとERRORはいらない」なんてことはありません。WARNやERRORより重要なINFOって普通は考えられないからです。
ですので、ログの出力の設定は、「INFO以上」とか「DEBUG以上」といった指定になります。出力する重要度の最低ラインを設定する、と考えるとわかりやすいでしょう。

## ログの出力レベルを設定する

さて、A360のログ運用で気をつけないといけないのは、**Node_ManagerとBot_LauncherとTriggerListenerそれぞれに出力設定がある**ことです。~~BrowserAgent系は設定、見当たらないですね。そもそもユーザーが見る・調節するものじゃないのでしょう。~~ 設定があったので追記しました。

Botの開発時に、個人的にデバッグする、というだけなら、Bot_LauncherのログだけDEBUG出力にすれば良いです。しかし、障害発生時の調査などでは、少なくともNode_ManagerとBot_Launcher、トリガーを使用しているならTriggerListenerもあわせて設定する必要があります。

具体的な作業手順のところにも書きましたが、**Bot Agentサービスを停止してから**設定は変更しましょう。

:::note warn
ログ出力レベルの設定を行うときは、設定ファイルのバックアップを取ることを**強く推奨**します。設定ファイルが壊れてBot Agentの再インストール、とかなっても時間が無駄になるので。
:::

### Node_Manager.logの設定

`C:\Program Files\Automation Anywhere\Bot Agent\config`にある、`nodemanager-logging.xml`を、メモ帳などで編集します。

終わりのほう（標準だと43行目あたり）にある、

    <Root level="INFO">

の、`level="INFO"`を`level="DEBUG"`とか`level="TRACE"`にすればOKです。

### Bot_Launcher.logの設定

`C:\Program Files\Automation Anywhere\Bot Agent\config`にある、`botlauncher-logging.xml`を、メモ帳などで編集します。

終わりのほう（標準だと28行目あたり）にある、

    <Root level="INFO">

の、`level="INFO"`を`level="DEBUG"`とか`level="TRACE"`にすればOKです。

### TriggerListener.logの設定

`C:\Program Files\Automation Anywhere\Bot Agent\config`にある、`triggerlistener-logging.xml`を、メモ帳などで編集します。

終わりのほう（標準だと24行目あたり）にある、

    <Root level="INFO">

の、`level="INFO"`を`level="DEBUG"`とか`level="TRACE"`にすればOKです。

### BrowserAgentの設定

`C:\Program Files\Automation Anywhere\Bot Agent\AABrowserAgent`にある`BrowserAgent-log4net.config`をメモ帳などで編集します。**管理者権限で開いたエディタでないと編集できない**ので注意が必要です。
設定はChrome、Firefox、Edge全部に共通です。特定のブラウザだけ、という設定はできないようです。

上のほう（4行目あたり）にある、

    <level value="INFO" />

の、`value="INFO"` を、`value="DEBUG"`とかにすればOKです。他の設定ファイルと属性名が違いますが、設定する値の考え方は同じですね。

### 余談

::: note warn
ここは私の独自研究なので、間違ってる可能性があります。厳密なログ1行ずつの比較検証まではしてないので、違ってたらごめんなさい。
:::

ところで、上記3つのログ設定ファイルには、

    <Logger level="INFO" name="com.automationanywhere"/>

という行も含まれています。これは[公式ドキュメント](https://docs.automationanywhere.com/ja-JP/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/working-with-automation-tasks/analyze-bot-agent-logs.html "Bot agent ログ ファイル") にも修正するようには指示されていないです。

ここは変更不要なの？という気になったので、ちょっと検証してみました。

結論から書くと、少なくとも、A360.24R2かつBot Agentバージョン21.200では、少なくとも**DEBUGやTRACEを取得する範囲では**、特に影響がないようです。

もうちょっと詳しく書くと、この設定はA360製品内部の`com.automationanywhere`というJavaクラス（および、その子クラス）から出力されるログ情報をINFOに固定する、という内容です。ですが、DEBUGやTRACEは別のクラス経由で出力されているようで、実質、効果がない・・・と言えるでしょう。
逆に、ログ出力レベルを`WARN`とか`ERROR`とかに設定しても、上記で上書きされるので、一部の情報はINFOレベルであっても出力されます。されるみたいです。

すなわち、上記の設定は「ログを詳細に出すかどうか」という視点であれば、とりあえず無視できる、と考えて良さそうです。というのが個人的な見解ではありますが、不安だったら、たとえばTRACEレベルのログがほしいのなら、上記の行も`level="TRACE"`とかに書き換えちゃうほうが無難かもしれません。

INFOレベルでもログ容量を圧迫するから、それより重要度の高いログしか出したくない、みたいなケースだと影響するかもしれませんが。
その場合、**そんな運用環境では、小手先でログレベルを弄ったところで、そう遠くない将来に運用が破綻するので、とっととSSDを交換する等で、ストレージ容量を確保すべき**です。


# まとめ

- Bot Agentのログを取るときはサービスを止めてから
- ログファイルは複数の種類（ファイル）にわかれてます
- ログ出力設定もファイルごとにわかれてます

それでは、楽しいRPAライフを！