[Home] [Help]
PACKAGE BODY: APPS.BIS_FND_LOG_ADAPTER
Source
1 PACKAGE BODY BIS_FND_LOG_ADAPTER AS
2 /* $Header: BISMGPKB.pls 120.0 2005/06/01 16:09:39 appldev noship $ */
3
4 TYPE T_PROGRESS_REC_TYPE IS RECORD(
5 object_key FND_LOG_MESSAGES.MODULE%TYPE,
6 progress_name FND_LOG_MESSAGES.MODULE%TYPE,
7 progress_start NUMBER,
8 progress_end NUMBER,
9 progress_start_time Date,
10 progress_end_time Date
11 );
12
13 TYPE G_PROGRESS_TAB_TYPE is table of T_PROGRESS_REC_TYPE index by binary_integer;
14 G_PROGRESS_TABLE G_PROGRESS_TAB_TYPE ;
15 G_PROG_TABLE_SIZE binary_integer := 0;
16 G_LOG_LEVEL NUMBER := 1000;
17
18 STRING_UNEXPECTED CONSTANT VARCHAR2(30) := 'UNEXPECTED';
19 STRING_ERROR CONSTANT VARCHAR2(30) := 'ERROR';
20 STRING_EXCEPTION CONSTANT VARCHAR2(30) := 'EXCEPTION';
21 STRING_EVENT CONSTANT VARCHAR2(30) := 'EVENT';
22 STRING_PROCEDURE CONSTANT VARCHAR2(30) := 'PROCEDURE';
23 STRING_STATEMENT CONSTANT VARCHAR2(30) := 'STATEMENT';
24 STRING_UNKNOWN CONSTANT VARCHAR2(30) := 'UNKNOWN';
25
26 MAX_STRING_SIZE CONSTANT NUMBER := 4000;
27
28 g_module_prefix varchar2(3):='bis';
29
30 FUNCTION GET_FND_DEBUG_LEVEL
31 RETURN NUMBER
32 IS
33 BEGIN
34 IF (G_LOG_LEVEL = 1000 ) THEN
35 G_LOG_LEVEL := FND_PROFILE.VALUE('AFLOG_LEVEL');
36 END IF;
37 RETURN G_LOG_LEVEL;
38 END;
39
40 FUNCTION IS_ENABLED(p_servirity number ) RETURN BOOLEAN
41 IS
42 enable boolean;
43 module varchar2(2000):= NULL;
44 BEGIN
45 --module := UPPER(SUBSTR(FND_PROFILE.VALUE('AFLOG_MODULE'), 1, 2000));
46 enable := --(module is NULL OR module ='%') OR
47 FND_LOG.TEST(p_servirity, g_module_prefix||'.' ) OR
48 FND_LOG.TEST(p_servirity, g_module_prefix ) OR
49 FND_LOG.TEST(p_servirity, '%' );
50 RETURN enable;
51 END;
52
53
54
55 FUNCTION GET_LEVEL_STRING( p_level number )
56 RETURN VARCHAR2
57 IS
58 BEGIN
59 IF( p_level = FND_LOG.LEVEL_UNEXPECTED) then
60 return STRING_UNEXPECTED;
61 ELSIF ( p_level = FND_LOG.LEVEL_ERROR) then
62 return STRING_ERROR;
63 ELSIF ( p_level = FND_LOG.LEVEL_EXCEPTION) then
64 return STRING_EXCEPTION;
65 ELSIF ( p_level = FND_LOG.LEVEL_EVENT) then
66 return STRING_EVENT;
67 ELSIF ( p_level = FND_LOG.LEVEL_PROCEDURE) then
68 return STRING_PROCEDURE;
69 ELSIF ( p_level = FND_LOG.LEVEL_STATEMENT) then
70 return STRING_STATEMENT;
71 ELSE
72 return STRING_UNKNOWN;
73 end if;
74 END;
75
76
77
78 FUNCTION GET_SESSIONID_FROM_KEY(p_logkey varchar2)
79 RETURN VARCHAR2
80 IS
81 BEGIN
82 return substr(p_logkey,
83 instr( p_logkey, '-', instr(p_logkey, '__')) + 1 ,
84 instr(p_logkey, '__', 1, 2 ) -
85 instr( p_logkey, '-', instr(p_logkey, '__')) - 1 );
86 END;
87
88 FUNCTION get_mili(
89 p_time number) return VARCHAR2 IS
90 l_mil number;
91 BEGIN
92 l_mil := mod(p_time, 100);
93 if (l_mil < 10) then
94 return '0' || l_mil;
95 else
96 return l_mil;
97 end if;
98 END get_mili;
99
100
101
102 FUNCTION duration(
103 p_duration number) return VARCHAR2 IS
104 l_hrs number;
105 l_mins number;
106 l_ses number;
107 l_mil number;
108 l_dur number := p_duration;
109 l_dur_chr VARCHAR2(2);
110 BEGIN
111
112 l_hrs := floor(l_dur/360000);
113 l_dur := l_dur -l_hrs*360000;
114 l_mins := floor(l_dur/6000);
115 l_dur := l_dur - l_mins * 6000;
116 l_ses := floor(l_dur/100);
117 l_dur := l_dur - l_mins * 100;
118 l_mil := l_dur;
119 if (l_mil < 10) then
120 l_dur_chr := '0' || l_mil;
121 else
122 l_dur_chr := l_mil;
123 end if;
124 return( l_hrs ||':'||
125 l_mins ||':'||
126 l_ses ||'.'||
127 l_dur_chr);
128 END duration;
129
130 PROCEDURE WRITE_CHUNK(p_level number, p_msg_txt varchar2, p_module varchar2,
131 p_session_id number, p_user_id number)
132 IS
133 l_chunk number := 0;
134 BEGIN
135 WHILE( l_chunk*MAX_STRING_SIZE < length(p_msg_txt) )
136 LOOP
137 FND_LOG_REPOSITORY.STR_UNCHKED_INT_WITH_CONTEXT(
138 LOG_LEVEL=> p_level,
139 MODULE=> p_module,
140 MESSAGE_TEXT=> substr(p_msg_txt, l_chunk*MAX_STRING_SIZE + 1, MAX_STRING_SIZE),
141 SESSION_ID=> p_session_id,
142 USER_ID=> p_user_id);
143 l_chunk := l_chunk + 1;
144 END LOOP;
145 END;
146
147 PROCEDURE WRITE(p_level number, p_msg_txt varchar2, p_module varchar2 default null)
148 IS
149 l_user_id varchar2(2000);
150 l_session_id varchar2(2000);
151 BEGIN
152
153 l_user_id := fnd_profile.value('USER_ID');
154 if (l_user_id is null) then
155 l_user_id := -1;
156 end if ;
157
158 l_session_id := GET_SESSIONID_FROM_KEY(p_module);
159 if (l_session_id is null) then
160 l_session_id := -1;
161 end if;
162
163 -- MAX_STRING_SIZE
164 IF (IS_ENABLED(p_level)) THEN
165 WRITE_CHUNK(p_level, p_msg_txt, p_module, l_session_id, l_user_id);
166 END IF;
167 END;
168
169 PROCEDURE DEBUG(msg varchar2)
170 IS
171 BEGIN
172 if FND_LOG.LEVEL_UNEXPECTED>= FND_LOG.G_CURRENT_RUNTIME_LEVEL then
173 FND_LOG.string(FND_LOG.LEVEL_UNEXPECTED, 'bis.plsql.BIS_FND_LOG_ADAPTER.DEBUG', msg);
174 end if;
175 EXCEPTION
176 WHEN OTHERS THEN NULL;
177 END;
178
179 PROCEDURE NEW_PROGRESS(p_logkey varchar2, p_progress varchar2)
180 IS
181 l_errbuf varchar2(4000);
182 BEGIN
183
184 if (p_progress is null OR p_logkey is null) then
185 return;
186 end if;
187
188 -- Ensure p_progress uniqueness.
189 FOR i in 1 ..G_PROG_TABLE_SIZE
190 LOOP
191 IF(G_PROGRESS_TABLE(i).progress_name = p_progress AND
192 G_PROGRESS_TABLE(i).object_key = p_logkey) THEN
193 return;
194 END IF;
195 END LOOP;
196 G_PROG_TABLE_SIZE:= G_PROG_TABLE_SIZE + 1;
197 G_PROGRESS_TABLE(G_PROG_TABLE_SIZE).object_key := p_logkey;
198 G_PROGRESS_TABLE(G_PROG_TABLE_SIZE).progress_name := p_progress;
199 G_PROGRESS_TABLE(G_PROG_TABLE_SIZE).progress_start := dbms_utility.get_time;
200 G_PROGRESS_TABLE(G_PROG_TABLE_SIZE).progress_start_time := sysdate;
201
202 EXCEPTION
203 WHEN OTHERS THEN
204 l_errbuf :=sqlerrm;
205 DEBUG(l_errbuf);
206 END;
207
208
209 -- PROCEDURE LOG(p_logkey varchar2, p_progress varchar2, p_message varchar2, p_servirity number )
210 PROCEDURE LOG(p_logkey varchar2, p_progress varchar2, p_message varchar2 )
211 IS
212 l_module VARCHAR2(2000) := NULL;
213 l_match boolean := false;
214 l_errbuf varchar2(4000);
215 p_servirity number;
216 BEGIN
217 p_servirity := GET_FND_DEBUG_LEVEL;
218 IF (p_servirity <> 5 OR p_servirity <> 3 ) THEN
219 RETURN;
220 ELSIF ( NOT IS_ENABLED(p_servirity)) THEN
221 RETURN;
222 END IF;
223
224 if (p_progress is null OR p_logkey is null) then
225 return;
226 end if;
227
228 FOR i in 1 ..G_PROG_TABLE_SIZE
229 LOOP
230 IF(G_PROGRESS_TABLE(i).progress_name = p_progress AND
231 G_PROGRESS_TABLE(i).object_key = p_logkey AND
232 G_PROGRESS_TABLE(i).progress_end is not null) THEN
233 return;
234 END IF;
235
236 IF(G_PROGRESS_TABLE(i).progress_name = p_progress AND
237 G_PROGRESS_TABLE(i).object_key = p_logkey ) THEN
238 l_match := true;
239 END IF;
240 END LOOP;
241
242 IF (l_match) THEN
243 l_module := g_module_prefix||'.'|| p_logkey || '.PLSQL:' || p_progress || '.' || GET_LEVEL_STRING( p_servirity);
244 WRITE(p_servirity , p_message, l_module);
245 END IF;
246
247 EXCEPTION
248 WHEN OTHERS THEN
249 l_errbuf :=sqlerrm;
250 DEBUG(l_errbuf);
251 END;
252
253 PROCEDURE ClOSE_PROGRESS(p_logkey varchar2, p_progress varchar2)
254 IS
255 l_module VARCHAR2(2000) := NULL;
256 l_index NUMBER := 0;
257 l_message varchar2(2000):= NULL;
258 l_errbuf varchar2(4000);
259 BEGIN
260 if (p_progress is null OR p_logkey is null) then
261 return;
262 end if;
263
264 l_module := g_module_prefix||'.'|| p_logkey || '.PLSQL:' || p_progress || '.TIME';
265
266 -- Ensure p_progress uniqueness.
267 FOR l_index in 1 ..G_PROG_TABLE_SIZE
268 LOOP
269 IF(G_PROGRESS_TABLE(l_index).progress_name = p_progress AND
270 G_PROGRESS_TABLE(l_index).object_key = p_logkey AND
271 G_PROGRESS_TABLE(l_index).progress_end is null) THEN
272 G_PROGRESS_TABLE(l_index).progress_end := dbms_utility.get_time;
273 G_PROGRESS_TABLE(l_index).progress_end_time := sysdate;
274 l_message := to_char(G_PROGRESS_TABLE(l_index).progress_start_time, 'yyyy-mm-dd hh24:mi:ss') || '.' ||
275 get_mili(G_PROGRESS_TABLE(l_index).progress_start) ||'#'||
276 to_char(G_PROGRESS_TABLE(l_index).progress_end_time, 'yyyy-mm-dd hh24:mi:ss') || '.' ||
277 get_mili(G_PROGRESS_TABLE(l_index).progress_end)||'#' ||
278 duration(G_PROGRESS_TABLE(l_index).progress_end - G_PROGRESS_TABLE(l_index).progress_start);
279 WRITE(FND_LOG.LEVEL_UNEXPECTED , l_message, l_module);
280 EXIT;
281 END IF;
282 END LOOP;
283
284 EXCEPTION
285 WHEN OTHERS THEN
286 l_errbuf :=sqlerrm;
287 DEBUG(l_errbuf);
288 END;
289
290
291 END BIS_FND_LOG_ADAPTER;