Salesforce のデバッグログ

Salesforce の開発にあたっては、デバッグログ というログ機能が備わっておりこれがデバッグの助けになってくれます。
このデバッグログについて、最近、知らなかったことや勘違いしていたこと、新たに学んだことがあったので備忘録として残します。 正確な情報はでないかもしれませんので、参照される方はご注意ください。

デバッグログを見る

デバッグログは、いくつかの場所で見ることができます。

  • 設定 - 環境 - ログ - デバッグログ
  • 開発者コンソール - Logs
  • Tooling API


設定 - 環境 - ログ - デバッグログ

設定画面から見ることができます。ログはブラウザ上で見ることも、個々のログをファイルとしてダウンロードすることもできます。
不要になったログを削除することもできます。
一度に表示される件数が決まっていてそれほど多くないということと、フィルタ機能がないため、ログが多いときは目的のログにたどり着くのが難しいことがあります。


開発者コンソール - Logs

開発者コンソールを開いて、下の方にある Logs タブでログを見ることができます。個々のログをファイルとしてダウンロードすることもできます。
デフォルトでは自分以外のログしか見れませんが、メニューの Debug - Show My Current Logs Only のチェックを外すと他のユーザのログも見れるようになります。

開発者コンソールで見る場合は、Logs タブの下部に Filter というチェックボックスとテキストボックスがあり、これを使用すると特定のユーザのログのみ表示する、などのフィルタを行うことができます。
さらに、ログを開いて下部の Debug Only にチェックを入れると System.debug で出したログだけを見ることもできます。

なお、Logs タブにはリアルタイムでログのエントリが追加されていくためか、ログが多いと開発者コンソール自体が非常に重くなっていきますので、大量にログがある場合は注意が必要です。


Tooling API

API を使用してログを取得することができます。
ただ API を使って「見る」ことはあまり使わないかと思いますので、詳細は割愛します。


デバッグログを設定する

デバッグログを出力するためには、出力するように設定を行わなければいけません。設定も、上述の3箇所で行うことができます。

基本的に、デバッグログは「どのユーザのログを出すか」「どのくらいの期間」「どのくらい詳細に出すか」の組み合わせ=追跡フラグを設定します。

最も一般的には、以下のようになるかと思います。

  • デバッグログ画面で新規ボタンをクリック
  • 追跡対象エンティティ種別 に ユーザ を指定
  • 追跡対象エンティティ名 でログを出力したいユーザを指定
  • 開始日と有効期限を指定 (最大24時間までしか指定できない)
  • デバッグレベルを指定 デフォルトの SFDC_DevConsole でもたいていは十分

ここで有効期限には最大24時間までしか指定できないため、24時間を超えてログを取得したい場合は、1日1回などこれを更新する必要があります。

デバッグレベルは「どのくらい詳細に出すか」の指定で、ワークフローの情報だけ欲しい だとか コールアウトの情報だけ欲しい といった場合には自分でそのあたりを調整することができます。

追跡対象エンティティ種別 では、ユーザ、Apexクラス、Apexトリガなどを選択することができます。
ここで、 追跡対象エンティティ種別にApexクラスを選択してログを取りたいクラスを選択したら、そのクラスだけのログが取れる と勘違いしそうになりますが、そうではありません。
公式のドキュメントにも、以下のように記述されています。

自分自身を含む特定ユーザ、クラス、およびトリガのデバッグログを保持および管理できます。クラスおよびトリガの追跡フラグを設定してもログの生成や保存は行われません。 クラスおよびトリガの追跡フラグによって他のログレベル (ユーザ追跡フラグによって設定されたログレベルなど) が上書きされますが、ログが記録されることはありません。クラスまたはトリガが実行されたときにログ記録が有効であれば、実行時にログが生成されます。

https://help.salesforce.com/articleView?id=code_add_users_debug_log.htm より

追跡対象エンティティ種別にApexクラス/トリガを選択した追跡フラグを追加しても、それだけではログは出力されませんので、注意が必要です。