Basispaket mit Logging und Errorhandling für PL-/APEX-Anwendungen
Zum Logging von PL-Funktionen nutze ich eine Tabelle je Schema sowie eine einheitliche LOG-Funktion zum Mitschreiben relevanter Einträge:
Tabelle:
DROP TABLE AX_LOG CASCADE CONSTRAINTS;
CREATE TABLE AX_LOG
(
DATUM TIMESTAMP(6),
PCK VARCHAR2(255 CHAR),
MODUL VARCHAR2(255 CHAR),
TEXT VARCHAR2(1000 CHAR),
OS_USR VARCHAR2(255 CHAR),
AX_USR VARCHAR2(255 CHAR)
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
COMMENT ON TABLE AX_LOG IS 'Log-Tabelle zur APEX-Anwendung; FS - 04.08.2010';
COMMENT ON COLUMN AX_LOG.DATUM IS 'Zeitstempel des Eintrags';
COMMENT ON COLUMN AX_LOG.PCK IS 'PL-Paket';
COMMENT ON COLUMN AX_LOG.MODUL IS 'Anwendungsmodul';
COMMENT ON COLUMN AX_LOG.TEXT IS 'Logtext';
COMMENT ON COLUMN AX_LOG.OS_USR IS 'Betriebsystem-Benutzer';
COMMENT ON COLUMN AX_LOG.AX_USR IS 'APEX-Benutzer';
PL-Paket:
create or replace package Test is
-- Author : SCHMIFA
-- Created : 24.11.2010 09:19:54
procedure bla -- Purpose : Test
;
end Test;
PL-Paket-BODY inkl Log-Funktion und Errorhandling:
create or replace package body Test is
-- Author : SCHMIFA
-- Created : 04.08.2010 13:56:55
-- Purpose : Logging für IPUCT3
procedure log -- Purpose : Logging für Anwendung
(
p_modul in varchar2, -- Name des Moduls (Proc, Func etc.)
p_text in VARCHAR2, -- Loggingtext
p_log in boolean default true -- Flag, ob Loginfo geschrieben werden soll (= true), oder nicht (=false)
)
is
pragma autonomous_transaction;
begin
if p_log then
insert into ax_log(datum, pck, modul, os_usr, ax_usr, text)
values (systimestamp, '<Paketname%gt', p_modul, SYS_CONTEXT ('USERENV', 'os_user'), SYS_CONTEXT ('USERENV', 'client_info'), p_text);
commit;
end if;
end log;
-- Author : SCHMIFA
-- Created : 12.08.2010 13:54:37
-- Purpose : Test
procedure bla -- Purpose : Test
is
v_ErrCode varchar2(100); -- Fehlercode
v_ErrTxt varchar2(500); -- Fehlermeldung
c_Modul constant varchar2(100) := 'bla'; -- Name des Moduls (für Logging)
c_debug boolean := true;
begin
log(c_Modul, 'BEGIN bla', c_debug);
null;
log(c_Modul, 'ENDE bla', c_debug);
exception
when others then
v_ErrCode := sqlcode;
v_ErrTxt := substr(sqlerrm,1,500);
log(c_Modul, 'FEHLER bla '||v_ErrCode||' / '||v_ErrTxt);
raise;
end bla;
end Test;
Tabelle:
DROP TABLE AX_LOG CASCADE CONSTRAINTS;
CREATE TABLE AX_LOG
(
DATUM TIMESTAMP(6),
PCK VARCHAR2(255 CHAR),
MODUL VARCHAR2(255 CHAR),
TEXT VARCHAR2(1000 CHAR),
OS_USR VARCHAR2(255 CHAR),
AX_USR VARCHAR2(255 CHAR)
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
COMMENT ON TABLE AX_LOG IS 'Log-Tabelle zur APEX-Anwendung; FS - 04.08.2010';
COMMENT ON COLUMN AX_LOG.DATUM IS 'Zeitstempel des Eintrags';
COMMENT ON COLUMN AX_LOG.PCK IS 'PL-Paket';
COMMENT ON COLUMN AX_LOG.MODUL IS 'Anwendungsmodul';
COMMENT ON COLUMN AX_LOG.TEXT IS 'Logtext';
COMMENT ON COLUMN AX_LOG.OS_USR IS 'Betriebsystem-Benutzer';
COMMENT ON COLUMN AX_LOG.AX_USR IS 'APEX-Benutzer';
PL-Paket:
create or replace package Test is
-- Author : SCHMIFA
-- Created : 24.11.2010 09:19:54
procedure bla -- Purpose : Test
;
end Test;
PL-Paket-BODY inkl Log-Funktion und Errorhandling:
create or replace package body Test is
-- Author : SCHMIFA
-- Created : 04.08.2010 13:56:55
-- Purpose : Logging für IPUCT3
procedure log -- Purpose : Logging für Anwendung
(
p_modul in varchar2, -- Name des Moduls (Proc, Func etc.)
p_text in VARCHAR2, -- Loggingtext
p_log in boolean default true -- Flag, ob Loginfo geschrieben werden soll (= true), oder nicht (=false)
)
is
pragma autonomous_transaction;
begin
if p_log then
insert into ax_log(datum, pck, modul, os_usr, ax_usr, text)
values (systimestamp, '<Paketname%gt', p_modul, SYS_CONTEXT ('USERENV', 'os_user'), SYS_CONTEXT ('USERENV', 'client_info'), p_text);
commit;
end if;
end log;
-- Author : SCHMIFA
-- Created : 12.08.2010 13:54:37
-- Purpose : Test
procedure bla -- Purpose : Test
is
v_ErrCode varchar2(100); -- Fehlercode
v_ErrTxt varchar2(500); -- Fehlermeldung
c_Modul constant varchar2(100) := 'bla'; -- Name des Moduls (für Logging)
c_debug boolean := true;
begin
log(c_Modul, 'BEGIN bla', c_debug);
null;
log(c_Modul, 'ENDE bla', c_debug);
exception
when others then
v_ErrCode := sqlcode;
v_ErrTxt := substr(sqlerrm,1,500);
log(c_Modul, 'FEHLER bla '||v_ErrCode||' / '||v_ErrTxt);
raise;
end bla;
end Test;
Eine Alternative hierzu ist z.B: Logger https://logger.samplecode.oracle.com/
AntwortenLöschen