2021/06/7

Salesforceにおけるデバッグログとは?設定方法や解析方法、注意点をご紹介

 
  

Salesforceにおけるデバッグログとは?

Salesforceにおけるデバックログとは、データベースの操作やシステムプロセス、トランザクションの実行や、テスト中に出たエラーを見つけるのに必要な機能です。 例えば、データベースの変更やHTTPのコールアウト、Apexのエラーの詳細、Apexによって使用されるリソースの詳細、ワークフロールール、割り当てルール、承認プロセスなど、自動化されたワークフローの処理などがあります。 自分を含むユーザやクラス、トリガのデバッグログを保持や管理できます。クラス、トリガが実行されたときにログ記録が有効ならば、実行時にログが作られます。 デバッグログには、「設定」から、「クイック検索」に「デバッグログ」と入力し、「デバッグログ」を選択しましょう。 次に、確認したいデバッグログ横の「表示」をクリックし、「ダウンロード」をクリックしてログをXMLファイルとしてダウンロードします。

Salesforceにおけるデバッグログの概要

ここでは、Salesforceにおける具体的なデバッグログを説明しましょう。 一般的に、デバッグログを作った場合、表示される情報の種類や量は、ユーザに設定した検索値によって変わります。しかし、デバッグログの形は変わりません。 Apexデバッグログでは、セッションIDは「SESSION_ID_REMOVED」に置き換えられますが、デバッグログには、ヘッダーのセクションがあります。 トランザクションで使われるAPIのバージョン、ログ生成に使用されるログのカテゴリとレベルがあるということです。 また、実行ユニットはトランザクションと同じで、トランザクション内で発生した全部の情報を含みます。EXECUTION_STARTEDとEXECUTION_FINISHEDの間が実行ユニットの範囲です。ユニットは、トランザクション内の作業単位になります。 たとえば、webserviceメソッド、トリガはコードの単位の1つです。なお、クラスはコードではありません。

サンプルコード

次に、サンプルコードを用いてSalesforceにおけるデバッグログを説明します。CODE_UNIT_STARTEDとCODE_UNIT_FINISHEDの間が、コードの単位の範囲です。作業の単位に他の作業単位の組み込みが可能です。 コードの組み込みには、トリガや承認プロセス、Apexリード変換、Web サービスの呼び出しの他、受信メール処理などが含まれます。 しかし、特定的というわけではなく、ログの行には、どのコードやルールが実行されているのかが示されます。 また、デバッグログにメッセージが書かれている場合もあります。以下、使用したサンプルコードになります。
 //ヘッダー部分
APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;
WORKFLOW,INFO

//コードユニット
EXECUTION_STARTED
CODE_UNIT_STARTED|[EXTERNAL]execute_anonymous_apex
CODE_UNIT_STARTED|[EXTERNAL]MyTrigger on Account trigger event BeforeInsert for [new]|__sfdc_trigger/MyTrigger
CODE_UNIT_FINISHED <-- The trigger ends
CODE_UNIT_FINISHED <-- The executeAnonymous ends
EXECUTION_FINISHED

//デバッグログの例
37.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;SYSTEM,DEBUG;
    VALIDATION,INFO;VISUALFORCE,INFO;WORKFLOW,INFO
Execute Anonymous: System.debug('Hello World!');
16:06:58.18 (18043585)|USER_INFO|[EXTERNAL]|005D0000001bYPN|devuser@example.org|
    Pacific Standard Time|GMT-08:00
16:06:58.18 (18348659)|EXECUTION_STARTED
16:06:58.18 (18383790)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
16:06:58.18 (23822880)|HEAP_ALLOCATE|[72]|Bytes:3
16:06:58.18 (24271272)|HEAP_ALLOCATE|[77]|Bytes:152
16:06:58.18 (24691098)|HEAP_ALLOCATE|[342]|Bytes:408
16:06:58.18 (25306695)|HEAP_ALLOCATE|[355]|Bytes:408
16:06:58.18 (25787912)|HEAP_ALLOCATE|[467]|Bytes:48
16:06:58.18 (26415871)|HEAP_ALLOCATE|[139]|Bytes:6
16:06:58.18 (26979574)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:1
16:06:58.18 (27384663)|STATEMENT_EXECUTE|[1]
16:06:58.18 (27414067)|STATEMENT_EXECUTE|[1]
16:06:58.18 (27458836)|HEAP_ALLOCATE|[1]|Bytes:12
16:06:58.18 (27612700)|HEAP_ALLOCATE|[50]|Bytes:5
16:06:58.18 (27768171)|HEAP_ALLOCATE|[56]|Bytes:5
16:06:58.18 (27877126)|HEAP_ALLOCATE|[64]|Bytes:7
16:06:58.18 (49244886)|USER_DEBUG|[1]|DEBUG|Hello World!
16:06:58.49 (49590539)|CUMULATIVE_LIMIT_USAGE
16:06:58.49 (49590539)|LIMIT_USAGE_FOR_NS|(default)|
  Number of SOQL queries: 0 out of 100
  Number of query rows: 0 out of 50000
  Number of SOSL queries: 0 out of 20
  Number of DML statements: 0 out of 150
  Number of DML rows: 0 out of 10000
  Maximum CPU time: 0 out of 10000
  Maximum heap size: 0 out of 6000000
  Number of callouts: 0 out of 100
  Number of Email Invocations: 0 out of 10
  Number of future calls: 0 out of 50
  Number of queueable jobs added to the queue: 0 out of 50
  Number of Mobile Apex push calls: 0 out of 10

16:06:58.49 (49590539)|CUMULATIVE_LIMIT_USAGE_END

16:06:58.18 (52417923)|CODE_UNIT_FINISHED|execute_anonymous_apex
16:06:58.18 (54114689)|EXECUTION_FINISHED

トリガ用のデバッグログ

続いて、トリガ用のデバッグログについて説明します。具体的には、デバッグの検索条件によってトリガやApexクラスのレベルを微調整できます。 たとえば、複雑なプロセスの出力を評価するときは、1つの要求で特定のクラスログの冗長性を上げて、他のクラス、トリガのログをオフにすることも可能です。 クラスやトリガのデバッグログレベルを上書きすると、これらのデバッグレベルはクラス、トリガが呼び出すクラスメソッドと、結果として実行されるトリガにも適用されます。 実行パス内すべてのクラスメソッドとトリガは、これらのデバッグログ設定を上書きする場合以外は、呼び出し側から継承します。 トリガ1がクラス1メソッドとCクラス2の別のメソッドを呼び出し、クラス1がクラス3のメソッドを呼び出し、さらにユーティリティクラスメソッドを呼び出します。 これが、クラス2がトリガ2の実行を起動させる仕組みです。
trigger Trigger1 on Account (before insert) {
    Class1.someMethod();
    Class2.anotherMethod();
}

public class Class1 {
    public static void someMethod() {
        Class3.thirdMethod();
    }
}

public class Class3 {
    public static void thirdMethod() {
        UtilityClass.doSomething();
    }
}

public class Class2 {
    public static void anotherMethod() {
        // Some code that causes Trigger2 to be fired.
    }
}

デバッグログの優先順位

デバッグログの優先順位についても、いくつか説明しましょう。Salesforceのデバッグログは、追跡フラグによって、他のログ記録ロジックもすべて上書きされます。 開発者コンソールの読み込みの際は、追跡フラグを「設定」やTraceFlag、DebugLevel Tooling APIオブジェクトを使って設置しましょう。追跡フラグが使用できないときは、同期、非同期Apexテストがデフォルトのログレベルで実行されます。 デフォルトのログは、DBではINFO、APEX_CODE、SYSTEMではDEBUGです。関連する追跡フラグが無効でテストが実行中ではないならば、APIヘッダーでログレベルが設定されます。 デバッグヘッダーなしで送信されたAPI要求は、別のログルールが有効でないとき、一時的なログ、保存されないログが生成されます。 また、エントリポイントでログレベルが設定されている場合は、ログレベルが使用されます。

Salesforceにおけるデバッグログの注意点

Salesforceにおけるデバッグログには、いくつか注意点があります。デバッグログには、時間をベースにしたトリガのアクション情報を記すことができません。 また、ApexコードのログレベルがFINESTの場合、Apex変数の割り当て詳細がデバッグログに含まれます。追跡するApexコードで機密データが処理されないかを確認しましょう。 FINESTログレベルを有効化する前に、組織のApexで処理される機密データのレベルを把握してください。 また、コミュニティユーザのセルフ登録など、ユーザパスワードがApex文字列変数に割り当てられる場合、プロセスに特に注意が必要です。 クラスやトリガの追跡フラグを設定しても、ログの生成や保存は行われません。クラス、トリガの追跡フラグにより、ユーザ追跡フラグによって設定されたログレベルが上書きされます。 ログ記録が有効のときのみ、実行時にログが生成されます。

Salesforceのデバッグログを活用しよう

今回は、Salesforceにおけるデバックログについて紹介しました。Salesforceのデバッグログは、データベースの操作やシステムプロセス、トランザクションの実行や、テスト中に出たエラーを見つけるための機能です。 自分を含み、ユーザやトリガのデバッグログは保存や管理ができます。特に実行中にエラーが起きた際はデバッグログを確認することがあるので、今後活用できるようにしておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】