Skip to content
Open
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ jlib/
install.txt
.project
.settings/
*~
.*sw[op]
19 changes: 11 additions & 8 deletions sql/install_log_user/create_table_tlog.sql
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,16 @@ declare
l$sql varchar2(1024) := '
CREATE TABLE TLOG
(
ID NUMBER,
LDATE TIMESTAMP DEFAULT SYSTIMESTAMP,
LHSECS NUMBER(38),
LLEVEL NUMBER(38),
LSECTION VARCHAR2(2000 BYTE),
LTEXT VARCHAR2(4000 BYTE),
LUSER VARCHAR2(30 BYTE),
ID NUMBER,
LDATE TIMESTAMP DEFAULT SYSTIMESTAMP,
LHSECS NUMBER(38),
LLEVEL NUMBER(38),
LSECTION VARCHAR2(2000 BYTE),
LACTION VARCHAR2(4000 BYTE),
LTEXT VARCHAR2(4000 BYTE),
LUSER VARCHAR2(30 BYTE),
LINSTANCE NUMBER(38) DEFAULT SYS_CONTEXT(''USERENV'', ''INSTANCE''),
LSID NUMBER,
LSID NUMBER,
LXML SYS.XMLTYPE DEFAULT NULL,
CONSTRAINT PK_STG PRIMARY KEY (ID))
';
Expand Down Expand Up @@ -80,6 +81,8 @@ COMMENT ON COLUMN TLOG.LLEVEL IS 'Log level as numeric value';

COMMENT ON COLUMN TLOG.LSECTION IS 'Formated call stack';

COMMENT ON COLUMN TLOG.LACTION IS 'Defined action';

COMMENT ON COLUMN TLOG.LUSER IS 'Database user (SYSUSER)';

COMMENT ON COLUMN TLOG.LINSTANCE IS 'The instance identification number of the current instance';
Expand Down
255 changes: 233 additions & 22 deletions sql/install_log_user/pb_plog.sql
Original file line number Diff line number Diff line change
Expand Up @@ -303,34 +303,35 @@ end;
--******************************************************************************
FUNCTION init
(
pSECTION IN TLOG.LSECTION%TYPE DEFAULT NULL ,
pLEVEL IN TLOG.LLEVEL%TYPE DEFAULT PLOGPARAM.DEFAULT_LEVEL,
pLOG4J IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_USE_LOG4J,
pLOGTABLE IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_TABLE,
pOUT_TRANS IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_OUT_TRANS,
pALERT IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_ALERT,
pTRACE IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_TRACE,
pDBMS_OUTPUT IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_DBMS_OUTPUT,
pSESSION IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_SESSION,
pDBMS_OUTPUT_WRAP IN PLS_INTEGER DEFAULT PLOGPARAM.DEFAULT_DBMS_OUTPUT_LINE_WRAP
pSECTION IN TLOG.LSECTION%TYPE DEFAULT NULL ,
pLEVEL IN TLOG.LLEVEL%TYPE DEFAULT PLOGPARAM.DEFAULT_LEVEL,
pLOG4J IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_USE_LOG4J,
pLOGTABLE IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_TABLE,
pOUT_TRANS IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_OUT_TRANS,
pALERT IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_ALERT,
pTRACE IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_LOG_TRACE,
pDBMS_OUTPUT IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_DBMS_OUTPUT,
pSESSION IN BOOLEAN DEFAULT PLOGPARAM.DEFAULT_SESSION,
pDBMS_OUTPUT_WRAP IN PLS_INTEGER DEFAULT PLOGPARAM.DEFAULT_DBMS_OUTPUT_LINE_WRAP
)
RETURN PLOGPARAM.LOG_CTX
IS
pCTX PLOGPARAM.LOG_CTX;
BEGIN

pCTX.isDefaultInit := TRUE;
pCTX.LSection := nvl(pSECTION, getCallStack);
pCTX.INIT_LSECTION := pSECTION;
pCTX.LLEVEL := pLEVEL;
pCTX.INIT_LLEVEL := pLEVEL;
pCTX.USE_LOG4J := pLOG4J;
pCTX.USE_OUT_TRANS := pOUT_TRANS;
pCTX.USE_LOGTABLE := pLOGTABLE;
pCTX.USE_ALERT := pALERT;
pCTX.USE_TRACE := pTRACE;
pCTX.USE_DBMS_OUTPUT := pDBMS_OUTPUT;
pCTX.USE_SESSION := pSESSION;
pCTX.isDefaultInit := TRUE;
pCTX.LSection := nvl(pSECTION, getCallStack);
pCTX.LAction := NULL;
pCTX.INIT_LSECTION := pSECTION;
pCTX.LLEVEL := pLEVEL;
pCTX.INIT_LLEVEL := pLEVEL;
pCTX.USE_LOG4J := pLOG4J;
pCTX.USE_OUT_TRANS := pOUT_TRANS;
pCTX.USE_LOGTABLE := pLOGTABLE;
pCTX.USE_ALERT := pALERT;
pCTX.USE_TRACE := pTRACE;
pCTX.USE_DBMS_OUTPUT := pDBMS_OUTPUT;
pCTX.USE_SESSION := pSESSION;
pCTX.DBMS_OUTPUT_WRAP := pDBMS_OUTPUT_WRAP;

begin
Expand All @@ -344,6 +345,98 @@ BEGIN

END init;

--******************************************************************************
-- FUNCTION init
--
-- pCONTEXT name of users' default global logging context
-- pSECTION log section
--
-- Public. Initializes a context with special values from users' global
-- logging context.
--
--******************************************************************************
FUNCTION init
(
pCONTEXT IN VARCHAR2,
pSECTION IN TLOG.LSECTION%TYPE
)
RETURN PLOGPARAM.LOG_CTX
IS
pCTX PLOGPARAM.LOG_CTX;
pVAL INTEGER;
BEGIN
pCTX := init( pSECTION );


-- FIXME: It doesn't working dbms_session.list_context( lCTX_INFO, lCTX_CNT );

select nvl(sys_context( pCONTEXT,'SECTION'), pCTX.LSection) into pCTX.LSection from dual;
select nvl(sys_context( pCONTEXT,'INIT_SECTION'), pCTX.INIT_LSECTION) into pCTX.INIT_LSECTION from dual;
select nvl(sys_context( pCONTEXT,'ACTION'), pCTX.LAction) into pCTX.LAction from dual;
select nvl(to_number(sys_context( pCONTEXT,'LEVEL')), pCTX.LLEVEL) into pCTX.LLEVEL from dual;
select nvl(to_number(sys_context( pCONTEXT,'INIT_LEVEL')), pCTX.INIT_LLEVEL) into pCTX.INIT_LLEVEL from dual;
select nvl(to_number(sys_context( pCONTEXT,'DBMS_OUTPUT_WRAP')), pCTX.DBMS_OUTPUT_WRAP) into pCTX.DBMS_OUTPUT_WRAP from dual;

select to_number(sys_context( pCONTEXT,'USE_LOG4J' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_LOG4J := false;
else pCTX.USE_LOG4J := true;
end if;
end if;

select to_number(sys_context( pCONTEXT,'USE_OUT_TRANS' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_OUT_TRANS := false;
else pCTX.USE_OUT_TRANS := true;
end if;
end if;

select to_number(sys_context( pCONTEXT,'USE_LOGTABLE' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_LOGTABLE := false;
else pCTX.USE_LOGTABLE := true;
end if;
end if;

select to_number(sys_context( pCONTEXT,'USE_ALERT' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_ALERT := false;
else pCTX.USE_ALERT := true;
end if;
end if;

select to_number(sys_context( pCONTEXT,'USE_TRACE' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_TRACE := false;
else pCTX.USE_TRACE := true;
end if;
end if;

select to_number(sys_context( pCONTEXT,'USE_DBMS_OUTPUT' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_DBMS_OUTPUT := false;
else pCTX.USE_DBMS_OUTPUT := true;
end if;
end if;

select to_number(sys_context( pCONTEXT,'USE_SESSION' )) into pVAL from dual;
if pVAL is NOT NULL then
if pVAL = 0
then pCTX.USE_SESSION := false;
else pCTX.USE_SESSION := true;
end if;
end if;

RETURN pCTX;

END init;

--******************************************************************************
-- PROCEDURE setBeginSection
--
Expand Down Expand Up @@ -436,6 +529,75 @@ BEGIN

END setEndSection;

--******************************************************************************
-- PROCEDURE setBeginAction
--
-- pCTX log context
-- pAction Action node to add
--
-- Public. Creates a new action node in the hierarchical action.
-- The text parameter pAction is added to the log context section.
--
--******************************************************************************
PROCEDURE setBeginAction
(
pCTX IN OUT NOCOPY PLOGPARAM.LOG_CTX,
pACTION IN TLOG.LACTION%TYPE
)
IS
BEGIN
checkAndInitCTX(pCTX);
pCTX.LAction := nvl(pCTX.LAction, '')||PLOGPARAM.DEFAULT_Section_sep||pACTION;

END setBeginAction;

--******************************************************************************
-- NAME: getAction
--
-- Public. Returns the action of a specific log context
--
--******************************************************************************
FUNCTION getAction
(
pCTX IN PLOGPARAM.LOG_CTX
)
RETURN VARCHAR2
IS
BEGIN

RETURN pCTX.LAction;

END getAction;

PROCEDURE setEndAction
(
pCTX IN OUT NOCOPY PLOGPARAM.LOG_CTX,
pACTION IN TLOG.LACTION%TYPE DEFAULT 'EndAllAction'
)
--******************************************************************************
-- NAME: setEndAction
--
-- PARAMETERS:
--
-- pCTX log context
-- pAction action node to close
--
-- Public. Closes an action node of a log context. If pAction is left NULL,
-- all nodes are closed.
--
--******************************************************************************
IS
BEGIN
checkAndInitCTX(pCTX);
IF pACTION = 'EndAllAction' THEN
pCTX.LAction := NULL;
RETURN;
END IF;

pCTX.LAction := substr(pCTX.LAction,1,instr(UPPER(pCTX.LAction), UPPER(pACTION), -1)-2);

END setEndAction;

PROCEDURE setTransactionMode
(
pCTX IN OUT NOCOPY PLOGPARAM.LOG_CTX,
Expand Down Expand Up @@ -3281,6 +3443,55 @@ BEGIN
log(pLEVEL => PLOGPARAM.DEFAULT_FT_ERR_BTRACE_LEVEL, pCTX => pCTX, pTEXT => LLTEXT );
END full_error_backtrace;

PROCEDURE createGlobalContext(
pCONTEXT IN VARCHAR2
)
--******************************************************************************
-- NAME: createGlobalContext
--
-- PARAMETERS:
--
-- pCONTEXT name of global system context
--
-- Public. Create global system context to keep default logging parametes.
--******************************************************************************
IS
BEGIN
execute immediate 'create context ' || pCONTEXT || ' using PLOG accessed globally';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL;
ELSE
RAISE;
END IF;
END createGlobalContext;

PROCEDURE setContextParameter
(
pCONTEXT IN VARCHAR2,
pPARAMETER IN VARCHAR2,
pVALUE IN VARCHAR2
)
--******************************************************************************
-- NAME: setContextParameter
--
-- PARAMETERS:
--
-- pCONTEXT name of global system context
-- pPARAMETER name of parameter:
-- ACTION, LEVEL, SECTION, USE_LOG4J, USE_OUT_TRANS,
-- USE_LOGTABLE, USE_ALERT, USE_TRACE, USE_DBMS_OUTPUT,
-- USE_SESSION, DBMS_OUTPUT_WRAP
-- pVALUE value of parameter
--
-- Public. Set parameter in global system context
--******************************************************************************
IS
BEGIN
DBMS_SESSION.Set_Context( pCONTEXT, upper(pPARAMETER), to_char(pVALUE) );
END setContextParameter;

-- end of the package
END;
/
12 changes: 8 additions & 4 deletions sql/install_log_user/pb_plog_out_session.sql
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,16 @@ PACKAGE BODY PLOG_OUT_SESSION AS
--*******************************************************************************

AS
lAction TLOG.LACTION%TYPE;
BEGIN
IF pCTX.USE_SESSION = TRUE THEN
dbms_application_info.set_module(pLSECTION || ' User:' || PLUSER, NULL);
dbms_application_info.set_action(PLOGPARAM.getLevelInText(pLLEVEL) || ' ' || to_char(pLDATE, 'DD.MM.YYYY HH24:MI:SS') || '-' || pLINSTANCE);
IF pCTX.USE_SESSION = TRUE THEN
IF pCTX.LAction IS NULL THEN
lAction := PLOGPARAM.getLevelInText(pLLEVEL) || ' ' || to_char(pLDATE, 'DD.MM.YYYY HH24:MI:SS') || '-' || pLINSTANCE;
ELSE
lAction := pCTX.LAction;
END IF;
dbms_application_info.set_module(pLSECTION, lAction);
dbms_application_info.set_client_info(pLTEXT);

END IF;
END log;

Expand Down
Loading