Härzlig willkome zue minere Bocksnip Code-Gallerie um alli Arte vo Code z'teile.

Log - Package Body

Avaloq · August 25, 2016 10:19 am

0 0 353

E Möglichkeit es eigenigs Logging z'mache

create or replace package body k.RBSC$LOG# is

subtype t_logger is rbsc$log_config.logger%type;

type t_log_config_tab is
table of pls_integer
index by t_logger;

b_log_config_tab t_log_config_tab;
b_log_config_tag number(20) := nvl(sys_context('RBSC$LOG_CFG', 'LAST_UPD'), 0);


---------------------------------------------------------------------------
-- Loads configuration for this session only
procedure log_config#reload
is
begin
b_log_config_tab.delete;
b_log_config_tag := nvl(sys_context('RBSC$LOG_CFG', 'LAST_UPD'), 0);
for c in (select * from rbsc$log_config) loop
b_log_config_tab(c.logger) := log_level#by_name(c.log_level);
end loop;
end log_config#reload;


---------------------------------------------------------------------------
function logger#log_level(
i_logger varchar2
)
return number
is
l_logger t_logger := lower(i_logger);
l_log_level number;
--
function logger#parent
return varchar2
is
l_pos number := instr(l_logger, '.', -1);
begin
if l_pos < 1 then
return null;
else
return substr(l_logger, 1, l_pos - 1);
end if;
end logger#parent;
begin
if l_logger is null then
return c_default_level;
else
if b_log_config_tab.count = 0 or
b_log_config_tag <> nvl(sys_context('RBSC$LOG_CFG', 'LAST_UPD'), 0) then
log_config#reload;
end if;
if b_log_config_tab.exists(l_logger) then
return b_log_config_tab(l_logger);
else
return logger#log_level(logger#parent);
end if;
end if;
end logger#log_level;


---------------------------------------------------------------------------
function logger#is_enbl(
i_logger varchar2
,i_log_level number
) return boolean
is
begin
return nvl(logger#log_level(i_logger), c_default_level) >= i_log_level;
end logger#is_enbl;


---------------------------------------------------------------------------
function log_level#by_name(
i_log_level varchar2
) return number
is
begin
case lower(i_log_level)
when 'error' then
return c_log_level_error;
when 'warn' then
return c_log_level_warn;
when 'info' then
return c_log_level_info;
when 'debug' then
return c_log_level_debug;
else
return null;
end case;
end log_level#by_name;


---------------------------------------------------------------------------
-- Notifies all sessions that config has changed
procedure log_config#notify_all
is
begin
dbms_session.set_context('RBSC$LOG_CFG', 'LAST_UPD', to_number(to_char(current_timestamp, 'MMDDSSSSSFF')));
end log_config#notify_all;


---------------------------------------------------------------------------
procedure upsert_logger(
i_logger varchar2
,i_log_level varchar2
)
is
l_logger varchar2(100) := lower(trim(i_logger));
l_log_level varchar2(100) := lower(trim(i_log_level));
begin
begin
insert into RBSC$LOG_CONFIG (logger, log_level)
values (l_logger, l_log_level);
exception
when dup_val_on_index then
update RBSC$LOG_CONFIG
set log_level = l_log_level
where logger = l_logger;
end;
commit;
log_config#notify_all;
exception
when others then
log#.alert(
'Error during upsert into RBSC$LOG_CONFIG'
,'Error during upsert into RBSC$LOG_CONFIG -> upsert_logger(' || l_logger || ', ' || l_log_level || ') ' || SQLERRM
);
end upsert_logger;


end RBSC$LOG#;
/

Besprich das Bocksnip
    Kei Kommentar zur Diskussion gfunde

    Du muesch igloggt si, um über das Bocksnip z'diskutiere
boecki

boecki

Nimmt teil
August 13, 2016

  • 64 Bocksnipa
    gschriebe
  • 0 Likes
    verteilt
  • 1 Kommentär gmacht
Bocksnip Tags
log
Teil din Code

Organisier und teil all dini Code Snips a eim Platz.