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;

Kommentare

  1. Eine Alternative hierzu ist z.B: Logger https://logger.samplecode.oracle.com/

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

trunc(sysdate) - nette Spiele mit dem Datum

Zufallszahlen und -text generieren - DBMS_RANDOM

Laufzeiten umrechnen, Sekundenangaben lesbar darstellen