CREATE OR REPLACE package pkg_common_logging
as
-- pkg_common_logging
-- 2009; Ingo Voland
--
-- Package enthaelt Funktionalitaeten fuer common logging
-- benoetigt: Tabelle COMLOG_APP_LOG
-- Sequence s_COMLOG_APP_LOG_id
--
--
--
-- folgende loglevel koennen definiert werden: debug / info / error
-- es werden nur logeintraege geschrieben, wenn der in der
-- session ein höherer oder gleicher loglevel gesetzte ist als der
-- für den logeintrag definierte. Somit kann eine 'debug' funktionalitaet
-- implementiert werden, ohne das diese debug Eintraege permanent die Logtabelle
-- fuellen
--
-- matrix: logeintrage werden geschrieben wenn:
--
-- Log Eintrag Loglevel Session Log Level
-- error info debug
-- error x x x
-- info x x
-- debug x
--
-- der default loglevel ist 'ERROR'
--
set_debug constant pls_integer := 3;
set_info constant pls_integer := 2;
set_error constant pls_integer := 1;
--
-- diese prozeduren setzen den loglevel fuer eine session
-- der wert bleibt aktiv solange die session offen ist
-- oder bis ein andere wert gesetzt wird
--
-- der loglevel kann in der session variable oder fix im package gesezt werden.
-- vorzugsweise soll der loglevel aber in der session gesetzt werden
-- um hardcodierte loglevel zu verhindern
--
procedure set_log_level(loglevel in pls_integer default set_error);
procedure set_log_level(loglevel in COMLOG_APP_LOG.log_level%type default 'ERROR');
--
-- diese prozeduren setzen die loginformationen fuer eine session
-- der wert bleibt aktiv bis:
-- * ein neuer wert gesetzte wird
-- * ein reset_log aufruf erfolgt
--
-- die gesetzte werte werden ebenfalls in v$session angezeigt
--
-- Das setzten eines wertes schreibt noch keine Eintraege in die Logtabellen
-- mit hilfe der gesezten werte fuer Modul und Action sind die Logeintraege
-- zu spaeteren Zeiten sortier- und gruppierbar
--
--
-- Modul: ist typischer weise der Name der ausführenden Procedure
-- Action: ist ein Subprozess in einer Procedure, z.b. 'fuellen der tabelle xyz'
-- client_info: ist eine beliebige information für die aktuelle ausgeführte operatiom
--
procedure set_module(module_name varchar2, action_name varchar2);
procedure set_action(action_name varchar2);
procedure set_client_info(client_info varchar2);
-- init_log: immer der erste Aufruf, das Loging wird initialisert
-- der eintrag wird immer im loglevel 'error' geschrieben
--
procedure init_log(module_name varchar2, action_name varchar2,client_info varchar2);
-- write_log
-- setzt 'cleint_info' und schreibt einen eintrag mit dem angegebenen loglevel.
-- wird kein loglevel angegeben wird der eintrag unter dem aktuell in der session
-- gesetzten loglevel geschrieben, default ist 'error'
-- zu beachten ist, das die logeintraege nur geschrieben werden wenn
-- der in der procedure angegebenen loglevel kleiner oder gleich
-- dem in der session gesetzten loglevel ist
procedure write_log(client_info varchar2, loglevel pls_integer default null );
-- write_log_ins
-- diese procedure schreibt die anzahl der in der vorherigen aktion durch insert eingefügten records
-- in die logtabelle. Fuer den Loglevel gilt das unter 'write_log' gesagte
--
-- beispiel:
-- insert into TEST values (1,'testlog');
-- pkg_common_logging.write_log_ins(loglevel => pkg_common_logging.set_info);
--
-- oder ohne spezifizierten loglevel, dann wird der session-loglevel genommen
-- und ein insert in die logtabelle findet immer statt
-- pkg_common_logging.write_log_ins;
--
procedure write_log_ins(NO_OF_RECORDS in COMLOG_APP_LOG.NO_OF_RECORDS%type default sql%rowcount, loglevel pls_integer default null);
-- write_log_del
-- diese procedure schreibt die anzahl der in der vorherigen aktion durch delete geloeschten records
-- in die logtabelle. Fuer den Loglevel gilt das unter 'write_log' gesagte
--
-- beispiel:
-- delete from test;
-- pkg_common_logging.write_log_del(loglevel => pkg_common_logging.set_info);
--
--
-- oder ohne spezifizierten loglevel, dann wird der session-loglevel genommen
-- und ein insert in die logtabelle findet immer statt
-- pkg_common_logging.write_log_del;
--
procedure write_log_del(NO_OF_RECORDS in COMLOG_APP_LOG.NO_OF_RECORDS%type default sql%rowcount, loglevel pls_integer default null);
-- write_log_upd
-- diese procedure schreibt die anzahl der in der vorherigen aktion durch insert eingefügten records
-- in die logtabelle. Fuer den Loglevel gilt das unter 'write_log' gesagte
--
-- beispiel:
-- update test set id = 3;
-- pkg_common_logging.write_log_upd(loglevel => pkg_common_logging.set_info);
--
-- oder ohne spezifizierten loglevel, dann wird der session-loglevel genommen
-- und ein insert in die logtabelle findet immer statt
-- pkg_common_logging.write_log_upd;
--
procedure write_log_upd(NO_OF_RECORDS in COMLOG_APP_LOG.NO_OF_RECORDS%type default sql%rowcount,loglevel pls_integer default null);
-- write_log_sel
-- diese procedure schreibt die anzahl der in der vorherigen aktion durch insert eingefügten records
-- in die logtabelle. Fuer den Loglevel gilt das unter 'write_log' gesagte
--
-- beispiel:
-- select count(*) into v_num from dual;
-- pkg_common_logging.write_log_sel(loglevel => pkg_common_logging.set_info);
--
-- oder ohne spezifizierten loglevel, dann wird der session-loglevel genommen
-- und ein insert in die logtabelle findet immer statt
-- pkg_common_logging.write_log_sel;
--
procedure write_log_sel(NO_OF_RECORDS in COMLOG_APP_LOG.NO_OF_RECORDS%type default sql%rowcount, loglevel pls_integer default null);
-- write_log_error
-- diese procedure schreibt die fehlernumer und fehlercode in die logtabelle ,
-- wenn in einer procedure eine exception aufgetreten ist. der Loglevel ist immer 'ERROR'
-- diese Procedure muss mit in das excaption handling der aufrufenden instanz eingebunden sein
--
-- beispiel:
--
-- declare
-- v_num number;
-- begin
-- select 1 / 0 ito v_num from dual;
--
-- exception
-- when others then
-- pkg_common_logging.write_log_error;
-- raise;
-- end;
--
--
procedure write_log_error(client_info varchar2 default null, error_no varchar2 default SQLCODE, error_info varchar2 default SQLERRM);
--
-- diese procedure wird üblicher weise am ende der abarbeitung einer procedure
-- oder eines subprozesses aufgerufen und erhoeht die SESSION_ID .
-- weiterhin werden alle anderen zaehler und timestamps
-- neu initialisiert.
--
procedure reset_log;
--
-- interne vars
--
r_comlog_app_log comlog_app_log%rowtype;
gv_log_level pls_integer;
function show_version return varchar2;
end pkg_common_logging;