APEX_DEBUGパッケージには、デバッグ・メッセージ・ログを管理するためのユーティリティ・ファンクションが用意されています。具体的には、このパッケージには、Application Expressアプリケーションに含まれるPL/SQLコードおよびデータベース・ストアド・プロシージャとファンクション内のPL/SQLコードのインストルメントおよびデバッグに必要なAPIが提供されています。PL/SQLコードをインストルメントすると、より迅速にバグを追跡し、予期しない動作を特定することが容易になります。
パッケージには、様々なデバッグ・レベルでのデバッグを有効または無効にする手段、およびメッセージ・ログをクリーンアップするユーティリティ・プロシージャもあります。
『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』のデバッグ・モードへのアクセスに関する説明を参照するか、またはAPEX_DEBUG_MESSAGESビューを問い合せることによって、メッセージ・ログを表示できます。
詳細は、個々のAPIの説明を参照してください。
|
注意: Oracle Application Express 4.2では、APEX_DEBUG_MESSAGEパッケージは、APEX_DEBUGにリネームされました。APEX_DEBUG_MESSAGEパッケージ名は、下位互換性のために引き続きサポートされます。ただし、Oracle Application Expressの旧バージョンでAPEX_DEBUGパッケージを実行する場合を除き、新規アプリケーションでは新しいAPEX_DEBUGパッケージを使用することをお薦めします。 |
トピック:
このパッケージでは、次の定数が使用されます。
subtype t_log_level is pls_integer; c_log_level_error constant t_log_level := 1; -- critical error c_log_level_warn constant t_log_level := 2; -- less critical error c_log_level_info constant t_log_level := 4; -- default level if debugging is enabled (for example, used by apex_application.debug) c_log_level_app_enter constant t_log_level := 5; -- application: messages when procedures/functions are entered c_log_level_app_trace constant t_log_level := 6; -- application: other messages within procedures/functions c_log_level_engine_enter constant t_log_level := 8; -- Application Express engine: messages when procedures/functions are entered c_log_level_engine_trace constant t_log_level := 9; -- Application Express engine: other messages within procedures/functions
このプロシージャは、デバッグ・メッセージを有効にします。重要性のレベルごとに、監視されるデバッグ・メッセージのタイプを指定できます。
|
注意: ENABLEプロシージャは、ページ・ビューまたはページ受入れごとに1回のみコールする必要があります。 |
構文
APEX_DEBUG.ENABLE (
p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_INFO );
パラメータ
表7-1に、APEX_DEBUG.ENABLEプロシージャで使用可能なパラメータを示します。
表7-1 APEX_DEBUG.ENABLEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ログに記録するメッセージの1つ以上のレベル。1から9までの整数である必要があり、レベル1は重要度が最も高いメッセージで、レベル9(デフォルト)は重要度が最も低いメッセージです。特定のレベルを設定すると、そのレベルおよびそのレベルより下のメッセージが記録されます。たとえば、 |
例
次の例に、レベル1、2および4のメッセージのロギングを有効にする方法を示します。これより高いレベルのメッセージは記録されません。
BEGIN
APEX_DEBUG.ENABLE(
apex_debug.c_log_level_info);
END;
このプロシージャは、c_log_level_app_enterレベルのメッセージを記録します。APEX_DEBUG.ENTER()を使用して、プロシージャまたはファンクションの先頭にあるルーチン名とその引数を記録します。
構文
APEX_DEBUG.ENTER ( p_routine_name IN VARCHAR2, p_name01 IN VARCHAR2 DEFAULT NULL, p_value01 IN VARCHAR2 DEFAULT NULL, p_name02 IN VARCHAR2 DEFAULT NULL, p_value02 IN VARCHAR2 DEFAULT NULL, p_name03 IN VARCHAR2 DEFAULT NULL, p_value03 IN VARCHAR2 DEFAULT NULL, p_name04 IN VARCHAR2 DEFAULT NULL, p_value04 IN VARCHAR2 DEFAULT NULL, p_name05 IN VARCHAR2 DEFAULT NULL, p_value05 IN VARCHAR2 DEFAULT NULL, p_name06 IN VARCHAR2 DEFAULT NULL, p_value06 IN VARCHAR2 DEFAULT NULL, p_name07 IN VARCHAR2 DEFAULT NULL, p_value07 IN VARCHAR2 DEFAULT NULL, p_name08 IN VARCHAR2 DEFAULT NULL, p_value08 IN VARCHAR2 DEFAULT NULL, p_name09 IN VARCHAR2 DEFAULT NULL, p_value09 IN VARCHAR2 DEFAULT NULL, p_name10 IN VARCHAR2 DEFAULT NULL, p_value10 IN VARCHAR2 DEFAULT NULL, p_value_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-2に、APEX_DEBUG.ENTERプロシージャで使用可能なパラメータを示します。
表7-2 APEX_DEBUG.ENTERプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
プロシージャまたはファンクションの名前。 |
|
|
プロシージャまたはファンクションのパラメータの名前および値。 |
|
|
値 |
例
次の例に、APEX_ENTERを使用して、プロシージャの先頭にデバッグ・メッセージを追加する方法を示します。
procedure foo (
p_widget_id in number,
p_additional_data in varchar2,
p_emp_rec in emp%rowtype )
is
begin
apex_debug.enter('foo',
'p_widget_id' , p_widget_id,
'p_additional_data', p_additional_data,
'p_emp_rec.id' , p_emp_rec.id );
....do something....
end foo;
このプロシージャは、c_log_level_errorレベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.ERROR (
p_message IN VARCHAR2,
p0 IN VARCHAR2 DEFAULT NULL,
p1 IN VARCHAR2 DEFAULT NULL,
p2 IN VARCHAR2 DEFAULT NULL,
p3 IN VARCHAR2 DEFAULT NULL,
p4 IN VARCHAR2 DEFAULT NULL,
p5 IN VARCHAR2 DEFAULT NULL,
p6 IN VARCHAR2 DEFAULT NULL,
p7 IN VARCHAR2 DEFAULT NULL,
p8 IN VARCHAR2 DEFAULT NULL,
p9 IN VARCHAR2 DEFAULT NULL,
p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-3に、ERRORプロシージャで使用可能なパラメータを示します。
表7-3 APEX_DEBUG.ERRORプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
|
'%s'プレースホルダに対する置換文字列。 |
|
|
値 |
例
次の例に、APEX_ERRORを使用して、デバッグ・ログに重大なエラーを記録する方法を示します。
apex_debug.error('Critical error %s', sqlerrm);
このプロシージャは、c_log_level_infoレベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.INFO (
p_message IN VARCHAR2,
p0 IN VARCHAR2 DEFAULT NULL,
p1 IN VARCHAR2 DEFAULT NULL,
p2 IN VARCHAR2 DEFAULT NULL,
p3 IN VARCHAR2 DEFAULT NULL,
p4 IN VARCHAR2 DEFAULT NULL,
p5 IN VARCHAR2 DEFAULT NULL,
p6 IN VARCHAR2 DEFAULT NULL,
p7 IN VARCHAR2 DEFAULT NULL,
p8 IN VARCHAR2 DEFAULT NULL,
p9 IN VARCHAR2 DEFAULT NULL,
p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-4に、APEX_DEBUG.INFOプロシージャで使用可能なパラメータを示します。
表7-4 APEX_DEBUG.INFOプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
|
'%s'プレースホルダに対する置換文字列。 |
|
|
値 |
例
次の例に、APEX_DEBUG.INFOを使用して、デバッグ・ログにログ情報を記録する方法を示します。
apex_debug.info('Important: %s', 'fnord');
このプロシージャは、デバッグ・ログにdbms_output.get_linesのコンテンツを記述します。dbms_outputを使用するレガシー・アプリケーションのメッセージは、デバッグ・ログにコピーされます。デバッグ・ログに書き込むには、dbms_output.enableを実行する必要があります。
構文
APEX_DEBUG.LOG_DBMS_OUTPUT;
パラメータ
なし。
例
次の例に、デバッグ・ログにDBMS_OUTPUTバッファのコンテンツを記録する方法を示します。
sys.dbms_output.enable;
sys.dbms_output.put_line('some data');
sys.dbms_output.put_line('other data');
apex_debug.log_dbms_output;
このプロシージャを使用して、Application ExpressのPLSQLコンポーネント、またはPLSQLプロシージャとファンクションからデバッグ・メッセージを生成します。このプロシージャは、LOG_MESSAGEと同様ですが、より長いメッセージのロギングが可能な点のみ異なります。このメッセージ・ログは、デバッグ出力で4,000の文字のチャンクに分割されます。1つのデバッグ・メッセージは4,000文字までに制限されているためです。
|
注意: このプロシージャのかわりに、「ERRORプロシージャ」、「WARNプロシージャ」、「MESSAGEプロシージャ」、「INFOプロシージャ」、「ENTERプロシージャ」または「TRACEプロシージャ」を使用します。 |
構文
APEX_DEBUG.LOG_LONG_MESSAGE (
p_message IN VARCHAR2 DEFAULT NULL,
p_enabled IN BOOLEAN DEFAULT FALSE,
p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_APP_TRACE);
パラメータ
表7-5に、APEX_DEBUG.LOG_LONG_MESSAGEプロシージャで使用可能なパラメータを示します。
表7-5 APEX_DEBUG.LOG_LONG_MESSAGEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
長いログ・メッセージ(最大サイズは32767バイト)。 |
|
|
デバッグが有効かどうかに関係なく、メッセージを常にログに記録するには |
|
p_level |
長いログ・メッセージのレベルを識別します。「定数」を参照してください。 |
例
次の例に、レベル1および2のメッセージに関してデバッグ・メッセージ・ロギングを有効にし、32767文字まで含むことができるレベル1のメッセージを表示する方法を示します。デバッグは明示的に有効になっており、このパラメータのデフォルト設定の無効よりも、この有効の設定のほうが優先されるため、p_enabledパラメータを指定する必要はありません。
DECLARE
l_msg VARCHAR2(32767) := 'Debug outputs anything up to varchar2 limit';
BEGIN
APEX_DEBUG.ENABLE (p_level => 2);
APEX_DEBUG.LOG_LONG_MESSAGE(
p_message => l_msg,
p_level => 1 );
END;
このプロシージャは、デバッグ・メッセージを記録します。
|
注意: このプロシージャのかわりに、「ERRORプロシージャ」、「WARNプロシージャ」、「MESSAGEプロシージャ」、「INFOプロシージャ」、「ENTERプロシージャ」または「TRACEプロシージャ」を使用します。 |
構文
APEX_DEBUG.LOG_MESSAGE (
p_message IN VARCHAR2 DEFAULT NULL,
p_enabled IN BOOLEAN DEFAULT FALSE,
p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_APP_TRACE );
パラメータ
表7-6に、APEX_DEBUG.LOG_MESSAGEプロシージャで使用可能なパラメータを示します。
表7-6 APEX_DEBUG.LOG_MESSAGEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
最大長が1000バイトのデバッグ・メッセージ。 |
|
|
ロギングが有効になっている(値がTRUEに設定されている)場合に、メッセージが記録されます。 |
|
|
ログ・メッセージのレベルを識別します(1は重要度が最も高く、9は重要度が最も低いログ・メッセージです)。これは整数値です。 |
例
次の例に、レベル1および2のメッセージに関してデバッグ・メッセージ・ロギングを有効にし、レベル1のメッセージと変数値を表示する方法を示します。デバッグは明示的に有効になっており、このパラメータのデフォルト設定の無効よりも、この有効の設定のほうが優先されるため、p_enabledパラメータを指定する必要はありません。
DECLARE
l_value varchar2(100) := 'test value';
BEGIN
APEX_DEBUG.ENABLE (p_level => 2);
APEX_DEBUG.LOG_MESSAGE(
p_message => 'l_value = ' || l_value,
p_level => 1 );
END;
このプロシージャは、セッションのアイテム値を記録します。
構文
APEX_DEBUG.LOG_PAGE_SESSION_STATE (
p_page_id IN NUMBER DEFAULT NULL,
p_enabled IN BOOLEAN DEFAULT FALSE,
p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_APP_TRACE );
パラメータ
表7-7に、APEX_DEBUG.LOG_SESSION_STATEプロシージャで使用可能なパラメータを示します。
表7-7 APEX_DEBUG.LOG_SESSION_STATEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
現在のアプリケーションとワークスペース・コンテキスト内のページを識別します。 |
|
|
ロギングが有効になっている(値がTRUEに設定されている)場合に、メッセージが記録されます。 |
|
|
ログ・メッセージのレベルを識別します(1は重要度が最も高く、9は重要度が最も低いログ・メッセージです)。整数値である必要があります。 |
例
次の例に、レベル1および2のメッセージに関してデバッグ・メッセージ・ロギングを有効にし、レベル1のメッセージをアプリケーションの現在のページのすべてのセッション・ステートを含めて表示する方法を示します。デバッグは明示的に有効になっており、このパラメータのデフォルト設定の無効よりも、この有効の設定のほうが優先されるため、p_enabledパラメータを指定する必要はありません。また、この例ではアプリケーションの現在のページのセッション・ステート情報を示すだけであるため、p_page_idを指定していません。
BEGIN
APEX_DEBUG.ENABLE (p_level => 2);
APEX_DEBUG.LOG_PAGE_SESSION_STATE (p_level => 1);
END;
このプロシージャは、書式設定されたデバッグ・メッセージの一般バージョンを記録します。
構文
APEX_DEBUG.MESSAGE (
p_message IN VARCHAR2,
p0 IN VARCHAR2 DEFAULT NULL,
p1 IN VARCHAR2 DEFAULT NULL,
p2 IN VARCHAR2 DEFAULT NULL,
p3 IN VARCHAR2 DEFAULT NULL,
p4 IN VARCHAR2 DEFAULT NULL,
p5 IN VARCHAR2 DEFAULT NULL,
p6 IN VARCHAR2 DEFAULT NULL,
p7 IN VARCHAR2 DEFAULT NULL,
p8 IN VARCHAR2 DEFAULT NULL,
p9 IN VARCHAR2 DEFAULT NULL,
p10 IN VARCHAR2 DEFAULT NULL,
p11 IN VARCHAR2 DEFAULT NULL,
p12 IN VARCHAR2 DEFAULT NULL,
p13 IN VARCHAR2 DEFAULT NULL,
p14 IN VARCHAR2 DEFAULT NULL,
p15 IN VARCHAR2 DEFAULT NULL,
p16 IN VARCHAR2 DEFAULT NULL,
p17 IN VARCHAR2 DEFAULT NULL,
p18 IN VARCHAR2 DEFAULT NULL,
p19 IN VARCHAR2 DEFAULT NULL,
p_max_length IN PLS_INTEGER DEFAULT 1000,
p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_INFO,
p_force IN BOOLEAN DEFAULT FALSE );
パラメータ
表7-8に、APEX_DEBUG.MESSAGEプロシージャで使用可能なパラメータを示します。
表7-8 APEX_DEBUG.MESSAGEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
|
'%s'プレースホルダに対する置換文字列。 |
|
|
値 |
|
|
メッセージのデフォルトのログ・レベルは、 |
|
|
TRUEの場合は、ページがデバッグ・モードでレンダリングされない場合や(URLまたは有効なプロシージャを使用して)構成されたデバッグ・メッセージより |
例
次の例に、APEX_DEBUG.MESSAGEプロシージャを使用して、デバッグ・ログにテキストを追加する方法を示します。
apex_debug.message('the value of %s + %s equals %s', 3, 5, 'eight');
このプロシージャを使用して、デバッグ・メッセージ・ログから、指定した日数よりも古いすべてのデータを削除します。
構文
APEX_DEBUG.REMOVE_DEBUG_BY_AGE (
p_application_id IN NUMBER,
p_older_than_days IN NUMBER);
パラメータ
表7-9に、APEX_DEBUG.REMOVE_DEBUG_BY_AGEプロシージャで使用可能なパラメータを示します。
表7-9 APEX_DEBUG.REMOVE_DEBUG_BY_AGEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アプリケーションのアプリケーションID |
|
|
データが削除される前に、デバッグ・メッセージ・ログに保持される日数。 |
例
次の例に、現在のアプリケーションに関するデバッグ・メッセージで、保持日数が3日以上になるものを削除する方法を示します。
BEGIN
APEX_DEBUG.REMOVE_DEBUG_BY_AGE (
p_application_id => TO_NUMBER(:APP_ID),
p_older_than_days => 3 );
END;
このプロシージャを使用して、デバッグ・メッセージ・ログから、指定したアプリケーションに属するすべてのデータを削除します。
構文
APEX_DEBUG.REMOVE_DEBUG_BY_APP (
p_application_id IN NUMBER);
パラメータ
表7-10に、APEX_DEBUG.REMOVE_DEBUG_BY_APPプロシージャで使用可能なパラメータを示します。
例
次の例に、現在のアプリケーションに関してログに記録されたすべてのデバッグ・メッセージを削除する方法を示します。
BEGIN
APEX_DEBUG.REMOVE_DEBUG_BY_APP(
p_application_id => TO_NUMBER(:APP_ID) );
END;
このプロシージャを使用して、メッセージ・ログから、指定したビューのすべてのデータを削除します。
構文
APEX_DEBUG.REMOVE_DEBUG_BY_VIEW (
p_application_id IN NUMBER,
p_view_id IN NUMBER);
パラメータ
表7-11に、APEX_DEBUG.REMOVE_DEBUG_BY_VIEWプロシージャで使用可能なパラメータを示します。
表7-11 APEX_DEBUG.REMOVE_DEBUG_BY_VIEWプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アプリケーションのアプリケーションID |
|
|
ビューのビューID。 |
例
次の例に、現在のアプリケーションに属している、ビュー識別子が12345のデバッグ・メッセージを削除する方法を示します。
BEGIN
APEX_DEBUG.REMOVE_DEBUG_BY_VIEW (
p_application_id => TO_NUMBER(:APP_ID),
p_view_id => 12345 );
END;
このプロシージャでは、ワークスペース内の指定されたセッションがデフォルトで現在のセッションとなるため、デバッグ・メッセージ・ログからすべてのデータが削除されます。
構文
APEX_DEBUG.REMOVE_SESSION_MESSAGES (
p_session IN NUMBER DEFAULT NULL);
パラメータ
表7-12に、APEX_DEBUG.REMOVE_SESSION_MESSAGESプロシージャで使用可能なパラメータを示します。
表7-12 APEX_DEBUG.REMOVE_SESSION_MESSAGESプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
セッションID。デフォルトの設定は現在のセッションです。 |
例
次の例に、現在のセッションでログに記録されたすべてのデバッグ・メッセージを削除する方法を示します。注意: p_sessionパラメータの値が渡されないため、プロシージャではデフォルトで現在のセッションが使用されます。
BEGIN
APEX_DEBUG.REMOVE_SESSION_MESSAGES();
END;
このプロシージャは、BOOLEANをVARCHAR2に変換します。
構文
APEX_DEBUG.TOCHAR (
p_value IN BOOLEAN )
return VARCHAR2;
パラメータ
表7-13に、APEX_DEBUG.TOCHARファンクションで使用可能なパラメータを示します。
例
次の例に、APEX_DEBUG.TOCHARファンクションを使用して、boolean値を他のデバッグ・プロシージャに渡せるようvarchar2に変換する方法を示します。
declare
l_state boolean;
begin
....
apex_debug.info('Value of l_state is %s', apex_debug.tochar(l_state));
....
end;
このプロシージャは、c_log_level_app_traceレベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.TRACE (
p_message IN VARCHAR2,
p0 IN VARCHAR2 DEFAULT NULL,
p1 IN VARCHAR2 DEFAULT NULL,
p2 IN VARCHAR2 DEFAULT NULL,
p3 IN VARCHAR2 DEFAULT NULL,
p4 IN VARCHAR2 DEFAULT NULL,
p5 IN VARCHAR2 DEFAULT NULL,
p6 IN VARCHAR2 DEFAULT NULL,
p7 IN VARCHAR2 DEFAULT NULL,
p8 IN VARCHAR2 DEFAULT NULL,
p9 IN VARCHAR2 DEFAULT NULL,
p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-14に、APEX_DEBUG.TRACEプロシージャで使用可能なパラメータを示します。
表7-14 APEX_DEBUG.TRACEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
|
'%s'プレースホルダに対する置換文字列。 |
|
|
値 |
例
次の例に、APEX_DEBUG.TRACEを使用して、デバッグ・ログに低レベルのデバッグ情報を記録する方法を示します。
apex_debug.trace('Low-level information: %s+%s=%s', 1, 2, 3);
このプロシージャは、c_log_level_warnレベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.WARN (
p_message IN VARCHAR2,
p0 IN VARCHAR2 DEFAULT NULL,
p1 IN VARCHAR2 DEFAULT NULL,
p2 IN VARCHAR2 DEFAULT NULL,
p3 IN VARCHAR2 DEFAULT NULL,
p4 IN VARCHAR2 DEFAULT NULL,
p5 IN VARCHAR2 DEFAULT NULL,
p6 IN VARCHAR2 DEFAULT NULL,
p7 IN VARCHAR2 DEFAULT NULL,
p8 IN VARCHAR2 DEFAULT NULL,
p9 IN VARCHAR2 DEFAULT NULL,
p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-15に、APEX_DEBUG.WARNプロシージャで使用可能なパラメータを示します。
表7-15 APEX_DEBUG.WARNプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
|
'%s'プレースホルダに対する置換文字列。 |
|
|
値 |
例
次の例に、APEX_DEBUG.WARNを使用して、デバッグ・ログに非常に重要なデータを記録する方法を示します。
apex_debug.warn('Soft constraint %s violated: %s', 4711, sqlerrm);