1 PACKAGE BODY pos_log AS
2 /*$Header: POSLOGB.pls 120.2 2006/02/20 11:43:06 bitang noship $ */
3
4 -- This procedure returns the combined messages in fnd_msg_pub
5 PROCEDURE combine_fnd_msg
6 (p_msg_count IN NUMBER,
7 x_msg_data OUT nocopy VARCHAR2
8 )
9 IS
10 l_msg VARCHAR2(4000);
11 BEGIN
12 FOR l_idx IN 1..p_msg_count LOOP
13 x_msg_data := x_msg_data || ' ' || fnd_msg_pub.get(l_idx);
14 END LOOP;
15 END combine_fnd_msg;
16
17 -- This procedure logs the return status, msg count and msg data.
18 -- p_prefix will be used as the prefix of the logged message
19 PROCEDURE log_call_result
20 (p_module IN VARCHAR2,
21 p_prefix IN VARCHAR2,
22 p_return_status IN VARCHAR2,
23 p_msg_count IN NUMBER,
24 p_msg_data IN VARCHAR2,
25 p_name1 IN VARCHAR2 DEFAULT NULL,
26 p_value1 IN VARCHAR2 DEFAULT NULL,
27 p_name2 IN VARCHAR2 DEFAULT NULL,
28 p_value2 IN VARCHAR2 DEFAULT NULL,
29 p_name3 IN VARCHAR2 DEFAULT NULL,
30 p_value3 IN VARCHAR2 DEFAULT NULL
31 )
32 IS
33 l_level NUMBER;
34 l_msg VARCHAR2(4000);
35 BEGIN
36
37 IF p_return_status = fnd_api.g_ret_sts_success THEN
38 l_level := fnd_log.level_statement;
39 ELSE
40 l_level := fnd_log.level_error;
41 END IF;
42
43 IF l_level >= fnd_log.g_current_runtime_level THEN
44 fnd_log.string (l_level
45 , p_module
46 , p_prefix || ' return status ' || p_return_status
47 || ' msg count ' || p_msg_count
48 || ' msg data ' || p_msg_data
49 );
50
51 IF p_msg_count > 1 THEN
52 combine_fnd_msg(p_msg_count, l_msg);
53 fnd_log.string(l_level
54 , p_module
55 , p_prefix
56 || ' combined msg data ' || l_msg
57 );
58 END IF;
59
60 END IF;
61
62 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
63 l_msg := NULL;
64
65 IF p_name1 IS NOT NULL THEN
66 l_msg := p_name1 || '=' || p_value1;
67 END IF;
68
69 IF p_name2 IS NOT NULL THEN
70 l_msg := ', ' || p_name2 || '=' || p_value2;
71 END IF;
72
73 IF p_name3 IS NOT NULL THEN
74 l_msg := ', ' || p_name3 || '=' || p_value3;
75 END IF;
76
77 IF l_msg IS NOT NULL THEN
78 -- the following if statement is not needed but we added
79 -- it so that the GSCC checker will not compaint
80 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
81 fnd_log.string(fnd_log.level_statement,
82 p_module,
83 p_prefix || ' name values: ' || l_msg
84 );
85 END IF;
86 END IF;
87 END IF;
88
89 END log_call_result;
90
91 -- This procedure logs the current value of sqlerrm
92 PROCEDURE log_sqlerrm
93 (p_module IN VARCHAR2,
94 p_prefix IN VARCHAR2
95 )
96 IS
97 BEGIN
98 IF fnd_log.level_error >= fnd_log.g_current_runtime_level THEN
99 fnd_log.string (fnd_log.level_error
100 , p_module
101 , p_prefix || ' sqlerrm is ' || Sqlerrm
102 );
103 END IF;
104 END log_sqlerrm;
105
106 -- Warning: The following 3 procedures/function should be used together
107 -- Please read the instruction carefully before using them.
108 --
109 -- Usage: say you want to log field names and values of a plsql record type variable.
110 -- 1. You should call set_msg_prefix so that your logs will share the common prefix
111 -- which you can use to correlate the logs.
112 -- 2. Then you call set_msg_module so that your logs will share the same log module
113 -- 3. Then you call log_field for each field name, and value.
114 -- 4. You will then call finish_log_field at the end.
115
116 PROCEDURE set_msg_prefix (p_prefix IN VARCHAR2) IS
117 BEGIN
118 g_msg_prefix := p_prefix || ': username [' || fnd_global.user_name || '] time [' ||
119 To_char(Sysdate, 'MMDDYYYY HH24:MI:SS') || ']:';
120 END set_msg_prefix;
121
122 PROCEDURE set_msg_module (p_module IN VARCHAR2) IS
123 BEGIN
124 g_msg_module := p_module;
125 END set_msg_module;
126
127 PROCEDURE log_field
128 (p_field_name IN VARCHAR2,
129 p_field_value IN VARCHAR2
130 )
131 IS
132 BEGIN
133 -- IF p_field_value IS NULL THEN
134 -- RETURN;
135 -- END IF;
136
137 IF Lengthb(g_msg_prefix) + Lengthb(g_msg) + 4 + Lengthb(p_field_name) + Lengthb(p_field_value) > 4000 THEN
138 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
139 fnd_log.string(fnd_log.level_procedure, g_msg_module, g_msg_prefix || g_msg);
140 END IF;
141 g_msg := NULL;
142 END IF;
143
144 g_msg := g_msg || ' ' || p_field_name || '=[' || p_field_value || ']';
145
146 END log_field;
147
148 PROCEDURE finish_log_field IS
149 BEGIN
150 IF g_msg IS NOT NULL THEN
151 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
152 fnd_log.string(fnd_log.level_procedure, g_msg_module, g_msg_prefix || g_msg);
153 END IF;
154 END IF;
155
156 g_msg := NULL;
157 g_msg_prefix := NULL;
158 g_msg_module := NULL;
159
160 END finish_log_field;
161
162 END pos_log;