1: package body AP_LOGGING_PKG as
2: /* $Header: apdologb.pls 120.3 2004/10/27 23:52:36 pjena noship $ */
3: --
4: -- _______
5: -- | |
73: -- Sends a message to a named pipe, updating memory usage statistics
74: -- when successfully sent.
75: --
76: ctr number(1) := 2; -- Assumes not enough space in pipe
77: maxsize number(5) := Ap_Logging_Pkg.DBG_Max_Size;
78: oldsizeused number(5) := SizeUsed;
79: oldlinesentered number(5) := LinesEntered;
80: --
81: BEGIN
112: LinesEntered := oldlinesentered;
113: StatString := Build_Stat_String(oldsizeused
114: ,maxsize
115: );
116: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
117: --
118: END Send_Message_To_Pipe;
119: --
120: procedure Pop_One_Level
118: END Send_Message_To_Pipe;
119: --
120: procedure Pop_One_Level
121: is
122: ctr number := length(Ap_Logging_Pkg.DBG_Debug_Stack);
123: BEGIN
124: if (
125: (Ap_Logging_Pkg.DBG_Message_Level > 0)
126: and
121: is
122: ctr number := length(Ap_Logging_Pkg.DBG_Debug_Stack);
123: BEGIN
124: if (
125: (Ap_Logging_Pkg.DBG_Message_Level > 0)
126: and
127: (instr(Ap_Logging_Pkg.DBG_Debug_Stack,'+') > 0)
128: ) then
129: while (ctr > 0) loop
123: BEGIN
124: if (
125: (Ap_Logging_Pkg.DBG_Message_Level > 0)
126: and
127: (instr(Ap_Logging_Pkg.DBG_Debug_Stack,'+') > 0)
128: ) then
129: while (ctr > 0) loop
130: exit when (substr(Ap_Logging_Pkg.DBG_Debug_Stack, ctr, 1) = '+');
131: ctr := ctr - 1;
126: and
127: (instr(Ap_Logging_Pkg.DBG_Debug_Stack,'+') > 0)
128: ) then
129: while (ctr > 0) loop
130: exit when (substr(Ap_Logging_Pkg.DBG_Debug_Stack, ctr, 1) = '+');
131: ctr := ctr - 1;
132: end loop;
133: Ap_Logging_Pkg.DBG_Debug_Stack := replace(Ap_Logging_Pkg.DBG_Debug_Stack
134: ,substr
129: while (ctr > 0) loop
130: exit when (substr(Ap_Logging_Pkg.DBG_Debug_Stack, ctr, 1) = '+');
131: ctr := ctr - 1;
132: end loop;
133: Ap_Logging_Pkg.DBG_Debug_Stack := replace(Ap_Logging_Pkg.DBG_Debug_Stack
134: ,substr
135: (Ap_Logging_Pkg.DBG_Debug_Stack
136: ,ctr
137: )
131: ctr := ctr - 1;
132: end loop;
133: Ap_Logging_Pkg.DBG_Debug_Stack := replace(Ap_Logging_Pkg.DBG_Debug_Stack
134: ,substr
135: (Ap_Logging_Pkg.DBG_Debug_Stack
136: ,ctr
137: )
138: ,''
139: );
136: ,ctr
137: )
138: ,''
139: );
140: Ap_Logging_Pkg.DBG_Message_Level := Ap_Logging_Pkg.DBG_Message_Level - 1;
141: end if;
142: END Pop_One_Level;
143: --
144: procedure Push_One_Level (P_Message_Location IN varchar2)
143: --
144: procedure Push_One_Level (P_Message_Location IN varchar2)
145: is
146: BEGIN
147: Ap_Logging_Pkg.DBG_Debug_Stack := Ap_Logging_Pkg.DBG_Debug_Stack||
148: '+'||P_Message_Location;
149: Ap_Logging_Pkg.DBG_Message_Level := Ap_Logging_Pkg.DBG_Message_Level + 1;
150: END Push_One_Level;
151: --
145: is
146: BEGIN
147: Ap_Logging_Pkg.DBG_Debug_Stack := Ap_Logging_Pkg.DBG_Debug_Stack||
148: '+'||P_Message_Location;
149: Ap_Logging_Pkg.DBG_Message_Level := Ap_Logging_Pkg.DBG_Message_Level + 1;
150: END Push_One_Level;
151: --
152: function Get_Location_Level (P_Message_Location IN varchar2)
153: return number
152: function Get_Location_Level (P_Message_Location IN varchar2)
153: return number
154: is
155: ctr number;
156: lvl number := Ap_Logging_Pkg.DBG_Message_Level;
157: stk varchar2(5000) := Ap_Logging_Pkg.DBG_Debug_Stack;
158: BEGIN
159: if (
160: (lvl > 0)
153: return number
154: is
155: ctr number;
156: lvl number := Ap_Logging_Pkg.DBG_Message_Level;
157: stk varchar2(5000) := Ap_Logging_Pkg.DBG_Debug_Stack;
158: BEGIN
159: if (
160: (lvl > 0)
161: and
220: -- Start clearing old messages under the same pipe, if present
221: dbms_pipe.purge(session_name);
222: --
223: -- Set the logging packaged variables:
224: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
225: Ap_Logging_Pkg.DBG_Max_Size := P_Max_Size;
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
221: dbms_pipe.purge(session_name);
222: --
223: -- Set the logging packaged variables:
224: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
225: Ap_Logging_Pkg.DBG_Max_Size := P_Max_Size;
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
229: Ap_Logging_Pkg.DBG_Debug_Stack := null;
222: --
223: -- Set the logging packaged variables:
224: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
225: Ap_Logging_Pkg.DBG_Max_Size := P_Max_Size;
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
229: Ap_Logging_Pkg.DBG_Debug_Stack := null;
230: Ap_Logging_Pkg.DBG_Currently_Logging := TRUE;
223: -- Set the logging packaged variables:
224: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
225: Ap_Logging_Pkg.DBG_Max_Size := P_Max_Size;
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
229: Ap_Logging_Pkg.DBG_Debug_Stack := null;
230: Ap_Logging_Pkg.DBG_Currently_Logging := TRUE;
231: --
224: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
225: Ap_Logging_Pkg.DBG_Max_Size := P_Max_Size;
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
229: Ap_Logging_Pkg.DBG_Debug_Stack := null;
230: Ap_Logging_Pkg.DBG_Currently_Logging := TRUE;
231: --
232: -- Initiates the pipe inserting the header as first message:
225: Ap_Logging_Pkg.DBG_Max_Size := P_Max_Size;
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
229: Ap_Logging_Pkg.DBG_Debug_Stack := null;
230: Ap_Logging_Pkg.DBG_Currently_Logging := TRUE;
231: --
232: -- Initiates the pipe inserting the header as first message:
233: Send_Message_To_Pipe (session_name
226: Ap_Logging_Pkg.DBG_Used_Size := 0;
227: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
228: Ap_Logging_Pkg.DBG_Message_Level := 0;
229: Ap_Logging_Pkg.DBG_Debug_Stack := null;
230: Ap_Logging_Pkg.DBG_Currently_Logging := TRUE;
231: --
232: -- Initiates the pipe inserting the header as first message:
233: Send_Message_To_Pipe (session_name
234: ,header_message
231: --
232: -- Initiates the pipe inserting the header as first message:
233: Send_Message_To_Pipe (session_name
234: ,header_message
235: ,Ap_Logging_Pkg.DBG_Log_Return_Code
236: ,Ap_Logging_Pkg.DBG_Stat
237: ,Ap_Logging_Pkg.DBG_Used_Size
238: ,Ap_Logging_Pkg.DBG_Lines_Entered
239: );
232: -- Initiates the pipe inserting the header as first message:
233: Send_Message_To_Pipe (session_name
234: ,header_message
235: ,Ap_Logging_Pkg.DBG_Log_Return_Code
236: ,Ap_Logging_Pkg.DBG_Stat
237: ,Ap_Logging_Pkg.DBG_Used_Size
238: ,Ap_Logging_Pkg.DBG_Lines_Entered
239: );
240: --
233: Send_Message_To_Pipe (session_name
234: ,header_message
235: ,Ap_Logging_Pkg.DBG_Log_Return_Code
236: ,Ap_Logging_Pkg.DBG_Stat
237: ,Ap_Logging_Pkg.DBG_Used_Size
238: ,Ap_Logging_Pkg.DBG_Lines_Entered
239: );
240: --
241: EXCEPTION
234: ,header_message
235: ,Ap_Logging_Pkg.DBG_Log_Return_Code
236: ,Ap_Logging_Pkg.DBG_Stat
237: ,Ap_Logging_Pkg.DBG_Used_Size
238: ,Ap_Logging_Pkg.DBG_Lines_Entered
239: );
240: --
241: EXCEPTION
242: --
240: --
241: EXCEPTION
242: --
243: when OTHERS then
244: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
245: Ap_Logging_Pkg.DBG_Max_Size := 0;
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
241: EXCEPTION
242: --
243: when OTHERS then
244: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
245: Ap_Logging_Pkg.DBG_Max_Size := 0;
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
242: --
243: when OTHERS then
244: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
245: Ap_Logging_Pkg.DBG_Max_Size := 0;
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
243: when OTHERS then
244: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
245: Ap_Logging_Pkg.DBG_Max_Size := 0;
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
251: Ap_Logging_Pkg.DBG_Stat := Build_Stat_String(0,0);
244: Ap_Logging_Pkg.DBG_Pipe_Name := session_name;
245: Ap_Logging_Pkg.DBG_Max_Size := 0;
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
251: Ap_Logging_Pkg.DBG_Stat := Build_Stat_String(0,0);
252: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
245: Ap_Logging_Pkg.DBG_Max_Size := 0;
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
251: Ap_Logging_Pkg.DBG_Stat := Build_Stat_String(0,0);
252: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
253: --
246: Ap_Logging_Pkg.DBG_Used_Size := 0;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
251: Ap_Logging_Pkg.DBG_Stat := Build_Stat_String(0,0);
252: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
253: --
254: END Ap_Begin_Log;
247: Ap_Logging_Pkg.DBG_Lines_Entered := 0;
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
251: Ap_Logging_Pkg.DBG_Stat := Build_Stat_String(0,0);
252: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
253: --
254: END Ap_Begin_Log;
255: --
248: Ap_Logging_Pkg.DBG_Message_Level := 0;
249: Ap_Logging_Pkg.DBG_Debug_Stack := null;
250: Ap_Logging_Pkg.DBG_Log_Return_Code := -1;
251: Ap_Logging_Pkg.DBG_Stat := Build_Stat_String(0,0);
252: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
253: --
254: END Ap_Begin_Log;
255: --
256: --
263: NAME
264: Ap_End_Log
265: DESCRIPTION
266: This procedure issues the close message to the piping area in memory
267: identified by the actual value of Ap_Logging_Pkg.DBG_Pipe_Name
268: NOTES
269: Procedure to be conditionally executed from the application firing
270: the PL/SQL object
271: HISTORY (YY/MM/DD)
272: atassoni.it 95/07/05 Creation
273: */
274: --
275: footer_message varchar2(240) := '<< Closed '||
276: Ap_Logging_Pkg.DBG_Pipe_Name||
277: ' on '||
278: to_char(sysdate,'Mon dd hh24:mi:ss')||
279: ' - used: ';
280: BEGIN
279: ' - used: ';
280: BEGIN
281: --
282: footer_message := footer_message||Build_Stat_String
283: (Ap_Logging_Pkg.DBG_Used_Size+
284: length(footer_message)+16
285: ,Ap_Logging_Pkg.DBG_Max_Size
286: );
287: --
281: --
282: footer_message := footer_message||Build_Stat_String
283: (Ap_Logging_Pkg.DBG_Used_Size+
284: length(footer_message)+16
285: ,Ap_Logging_Pkg.DBG_Max_Size
286: );
287: --
288: -- Terminates the pipe trying to insert the footer as last message:
289: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
285: ,Ap_Logging_Pkg.DBG_Max_Size
286: );
287: --
288: -- Terminates the pipe trying to insert the footer as last message:
289: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
290: ,footer_message
291: ,Ap_Logging_Pkg.DBG_Log_Return_Code
292: ,Ap_Logging_Pkg.DBG_Stat
293: ,Ap_Logging_Pkg.DBG_Used_Size
287: --
288: -- Terminates the pipe trying to insert the footer as last message:
289: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
290: ,footer_message
291: ,Ap_Logging_Pkg.DBG_Log_Return_Code
292: ,Ap_Logging_Pkg.DBG_Stat
293: ,Ap_Logging_Pkg.DBG_Used_Size
294: ,Ap_Logging_Pkg.DBG_Lines_Entered
295: );
288: -- Terminates the pipe trying to insert the footer as last message:
289: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
290: ,footer_message
291: ,Ap_Logging_Pkg.DBG_Log_Return_Code
292: ,Ap_Logging_Pkg.DBG_Stat
293: ,Ap_Logging_Pkg.DBG_Used_Size
294: ,Ap_Logging_Pkg.DBG_Lines_Entered
295: );
296: --
289: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
290: ,footer_message
291: ,Ap_Logging_Pkg.DBG_Log_Return_Code
292: ,Ap_Logging_Pkg.DBG_Stat
293: ,Ap_Logging_Pkg.DBG_Used_Size
294: ,Ap_Logging_Pkg.DBG_Lines_Entered
295: );
296: --
297: -- Extinguish piping to this name
290: ,footer_message
291: ,Ap_Logging_Pkg.DBG_Log_Return_Code
292: ,Ap_Logging_Pkg.DBG_Stat
293: ,Ap_Logging_Pkg.DBG_Used_Size
294: ,Ap_Logging_Pkg.DBG_Lines_Entered
295: );
296: --
297: -- Extinguish piping to this name
298: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
294: ,Ap_Logging_Pkg.DBG_Lines_Entered
295: );
296: --
297: -- Extinguish piping to this name
298: Ap_Logging_Pkg.DBG_Currently_Logging := FALSE;
299: --
300: END Ap_End_Log;
301: --
302: --
303: function Ap_Pipe_Name
304: return varchar2
305: is
306: BEGIN
307: return (Ap_Logging_Pkg.DBG_Pipe_Name);
308: END Ap_Pipe_Name;
309: --
310: --
311: procedure Ap_Pipe_Name_23 (P_Pipe_name OUT NOCOPY varchar2)
310: --
311: procedure Ap_Pipe_Name_23 (P_Pipe_name OUT NOCOPY varchar2)
312: is
313: BEGIN
314: P_Pipe_name := Ap_Logging_Pkg.DBG_Pipe_Name;
315: END Ap_Pipe_Name_23;
316: --
317: --
318: function Ap_Log_Return_Code
318: function Ap_Log_Return_Code
319: return number
320: is
321: BEGIN
322: return (Ap_Logging_Pkg.DBG_Log_Return_Code);
323: END Ap_Log_Return_Code;
324: --
325: --
326: procedure Ap_Begin_Block (P_Message_Location IN varchar2)
327: is
328: BEGIN
329: --
330: Push_One_Level (P_Message_Location);
331: Ap_Logging_Pkg.Ap_Log ('BEGIN '||P_Message_Location, P_Message_Location);
332: --
333: END Ap_Begin_Block;
334: --
335: --
336: procedure Ap_End_Block (P_Message_Location IN varchar2)
337: is
338: BEGIN
339: --
340: Ap_Logging_Pkg.Ap_Log ('END '||P_Message_Location, P_Message_Location);
341: Pop_One_Level;
342: --
343: END Ap_End_Block;
344: --
346: procedure Ap_Indent
347: is
348: BEGIN
349: --
350: Push_One_Level (to_char(Ap_Logging_Pkg.DBG_Message_Level+1));
351: --
352: END Ap_Indent;
353: --
354: --
377: Each message is automatically indented to the right on a
378: P_Message_Location basis through the current DBG_Debug_Stack value.
379: NOTES
380: This procedure issues the message to the piping area in memory
381: identified by the actual value of Ap_Logging_Pkg.DBG_Pipe_Name
382:
383: HISTORY (YY/MM/DD)
384: atassoni.it 95/07/05 Creation
385: */
390: NOTHING_TO_DO exception;
391: --
392: BEGIN
393: --
394: if (NOT nvl(Ap_Logging_Pkg.DBG_Currently_Logging, FALSE)) then
395: raise NOTHING_TO_DO;
396: end if;
397: --
398: if (P_Message_Location is null) then
396: end if;
397: --
398: if (P_Message_Location is null) then
399: -- No location passed in: assign a default one as level#
400: if (Ap_Logging_Pkg.DBG_Debug_Stack is null) then
401: location := '1';
402: else
403: location := to_char(Ap_Logging_Pkg.DBG_Message_Level);
404: end if;
399: -- No location passed in: assign a default one as level#
400: if (Ap_Logging_Pkg.DBG_Debug_Stack is null) then
401: location := '1';
402: else
403: location := to_char(Ap_Logging_Pkg.DBG_Message_Level);
404: end if;
405: end if;
406: --
407: current_level := Get_Location_Level (location);
411: Push_One_Level (location);
412: else
413: -- The location is already in the stack. Bring the stack to that level:
414: loop
415: exit when (current_level = Ap_Logging_Pkg.DBG_Message_Level);
416: Pop_One_Level;
417: end loop;
418: end if;
419: --
417: end loop;
418: end if;
419: --
420: -- Insert the message at current indentation level:
421: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
422: ,lpad(message
423: ,length(message)+2*Ap_Logging_Pkg.DBG_Message_Level
424: )
425: ,Ap_Logging_Pkg.DBG_Log_Return_Code
419: --
420: -- Insert the message at current indentation level:
421: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
422: ,lpad(message
423: ,length(message)+2*Ap_Logging_Pkg.DBG_Message_Level
424: )
425: ,Ap_Logging_Pkg.DBG_Log_Return_Code
426: ,Ap_Logging_Pkg.DBG_Stat
427: ,Ap_Logging_Pkg.DBG_Used_Size
421: Send_Message_To_Pipe (Ap_Logging_Pkg.DBG_Pipe_Name
422: ,lpad(message
423: ,length(message)+2*Ap_Logging_Pkg.DBG_Message_Level
424: )
425: ,Ap_Logging_Pkg.DBG_Log_Return_Code
426: ,Ap_Logging_Pkg.DBG_Stat
427: ,Ap_Logging_Pkg.DBG_Used_Size
428: ,Ap_Logging_Pkg.DBG_Lines_Entered
429: );
422: ,lpad(message
423: ,length(message)+2*Ap_Logging_Pkg.DBG_Message_Level
424: )
425: ,Ap_Logging_Pkg.DBG_Log_Return_Code
426: ,Ap_Logging_Pkg.DBG_Stat
427: ,Ap_Logging_Pkg.DBG_Used_Size
428: ,Ap_Logging_Pkg.DBG_Lines_Entered
429: );
430: --
423: ,length(message)+2*Ap_Logging_Pkg.DBG_Message_Level
424: )
425: ,Ap_Logging_Pkg.DBG_Log_Return_Code
426: ,Ap_Logging_Pkg.DBG_Stat
427: ,Ap_Logging_Pkg.DBG_Used_Size
428: ,Ap_Logging_Pkg.DBG_Lines_Entered
429: );
430: --
431: EXCEPTION
424: )
425: ,Ap_Logging_Pkg.DBG_Log_Return_Code
426: ,Ap_Logging_Pkg.DBG_Stat
427: ,Ap_Logging_Pkg.DBG_Used_Size
428: ,Ap_Logging_Pkg.DBG_Lines_Entered
429: );
430: --
431: EXCEPTION
432: --
454: -- \ /
455: -- v
456: --
457: --
458: end AP_LOGGING_PKG;