DBA Data[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;