Make call/error stack shorter for APEX and PL/SQL errors

This commit is contained in:
Jan Kvetina 2022-01-04 20:58:04 +01:00
parent 29fd7fb00e
commit 1e8e1f18df
3 changed files with 40 additions and 10 deletions

View File

@ -73,8 +73,6 @@ CREATE OR REPLACE PACKAGE app AS
-- transform $NAME to P500_NAME if current page_id = 500
page_item_wild CONSTANT VARCHAR2(4) := '$';
page_item_prefix CONSTANT VARCHAR2(4) := 'P';
--
------------------------item_request_id CONSTANT VARCHAR2(30) := 'G_REQUEST_ID';
-- name of AUTH package
auth_package CONSTANT VARCHAR2(30) := 'AUTH';
@ -1166,6 +1164,16 @@ CREATE OR REPLACE PACKAGE app AS
--
-- Remove some not interesting calls from call/error stacks
--
FUNCTION get_shorter_stack (
in_stack VARCHAR2
)
RETURN VARCHAR2;
--
-- Finds and returns root `log_id` for passed `log_id`
--

View File

@ -2120,12 +2120,12 @@ CREATE OR REPLACE PACKAGE BODY app AS
-- add call stack
IF (SQLCODE != 0 OR INSTR(app.track_callstack, rec.flag) > 0) THEN
rec.payload := SUBSTR(rec.payload || REPLACE(REPLACE(app.get_call_stack(), 'WWV_FLOW', '%'), app.schema_apex, '%'), 1, app.length_payload);
rec.payload := SUBSTR(rec.payload || app.get_shorter_stack(app.get_call_stack()), 1, app.length_payload);
END IF;
-- add error stack
IF SQLCODE != 0 THEN
rec.payload := SUBSTR(rec.payload || REPLACE(REPLACE(app.get_error_stack(), 'WWV_FLOW', '%'), app.schema_apex, '%'), 1, app.length_payload);
rec.payload := SUBSTR(rec.payload || app.get_shorter_stack(app.get_error_stack()), 1, app.length_payload);
END IF;
-- print message to console
@ -2268,11 +2268,11 @@ CREATE OR REPLACE PACKAGE BODY app AS
in_action_name => v_action_name,
in_arg1 => v_component,
in_arg2 => APEX_ERROR.GET_FIRST_ORA_ERROR_TEXT(p_error => p_error),
in_payload => REPLACE (
out_result.message || CHR(10) || '--' || CHR(10) ||
p_error.error_statement || CHR(10) || '--' || CHR(10) ||
--p_error.error_backtrace || CHR(10) || '--' || CHR(10)
p_error.ora_sqlerrm || CHR(10) || '--' || CHR(10), app.schema_apex, '%')
in_payload =>
out_result.message || CHR(10) || '--' || CHR(10) ||
app.get_shorter_stack(p_error.error_statement) || CHR(10) || '--' || CHR(10) ||
app.get_shorter_stack (p_error.ora_sqlerrm) || CHR(10) || '--' || CHR(10)
--app.get_shorter_stack (p_error.error_backtrace) || CHR(10) || '--' || CHR(10)
);
-- mark associated page item (when possible)
@ -2517,6 +2517,27 @@ CREATE OR REPLACE PACKAGE BODY app AS
FUNCTION get_shorter_stack (
in_stack VARCHAR2
)
RETURN VARCHAR2
AS
out_stack VARCHAR2(32767);
BEGIN
out_stack := REPLACE(REPLACE(in_stack, 'WWV_FLOW', '%'), app.schema_apex, '%');
--
out_stack := REGEXP_REPLACE(out_stack, '\s.*SQL.*\.EXEC.*\]', '.');
out_stack := REGEXP_REPLACE(out_stack, '\s%.*EXEC.*\]', '.');
out_stack := REGEXP_REPLACE(out_stack, '\s%_PROCESS.*\]', '.');
out_stack := REGEXP_REPLACE(out_stack, '\s%_ERROR.*\]', '.');
out_stack := REGEXP_REPLACE(out_stack, '\s%_SECURITY.*\]', '.');
out_stack := REGEXP_REPLACE(out_stack, '\sHTMLDB*\]', '.');
--
RETURN out_stack;
END;
FUNCTION get_log_root (
in_log_id logs.log_id%TYPE := NULL
)

View File

@ -5,6 +5,7 @@ WITH p AS (
a.alias AS app_alias,
a.application_group AS app_group,
a.owner AS app_schema,
a.application_name AS app_name,
a.authentication_scheme,
a.last_updated_on,
a.pages AS count_pages,
@ -16,7 +17,7 @@ WITH p AS (
)
SELECT
a.app_id,
a.app_name,
NVL(p.app_name, a.app_name) AS app_name,
p.app_alias,
p.app_group,
p.app_schema,