1 krisbash 1.1
2 #ifndef _oi_syslog_h
3 #define _oi_syslog_h
4
5 #include <oi/oi.h>
6 #include <syslog.h>
7 #include <pal/format.h>
8 #include <pal/strings.h>
9 #include <base/log.h>
10
11 BEGIN_EXTERNC
12
13 #define OILOGSYSTEM_SYSLOG
14
15 unsigned long OIActivityId(OIActivityControlCode controlcode, OIGUID * activityId) { return 0; }
16 PAL_INLINE void trace_EventTransfer(_Inout_opt_ OIGUID * activity, _Inout_ OIGUID * related) {}
17
18 /*
19 OMI Levels are as follows:
20 OMI_FATAL = 0
21 OMI_ERROR = 1
22 krisbash 1.1 OMI_WARNING = 2
23 OMI_INFO = 3
24 OMI_DEBUG = 4
25 OMI_VERBOSE = 5
26
27 Syslog levels to OMI
28 LOG_EMERG 0 0
29 LOG_ALERT 1 0
30 LOG_CRIT 2 0
31 LOG_ERR 3 1
32 LOG_WARNING 4 2
33 LOG_NOTICE 5 3
34 LOG_INFO 6 5
35 LOG_DEBUG 7 4
36 */
37 static int _Syslog2OMI[] = {0, 0, 0, 1, 2, 3, 5, 4};
38
39 /*
40 SYSLOG does not have LOG_VERBOSE, so we handle it separately
41 */
42 #define LOG_VERBOSE LOG_DEBUG
43 krisbash 1.1
44 /*
45 APPNAME, LOGOPT, LOGFACILITY are defines from the generated code.
46 */
47 PAL_INLINE void OpenSysLogOnce()
48 {
49 static int LogOpened = 0;
50 if (LogOpened == 1)
51 return;
52 openlog(APPNAME, LOGOPT, LOGFACILITY);
53 LogOpened = 1;
54 }
55
56 /*
57 Pulls OMI run-time log level, ex:
58 omiserver --loglevel 4
59 */
60 PAL_INLINE PAL_Boolean _ShouldSyslog(unsigned int level)
61 {
62 if (_Syslog2OMI[level] > Log_GetLevel())
63 return PAL_FALSE;
64 krisbash 1.1 else
65 return PAL_TRUE;
66 }
67
68 #define FORMATLENGTH 1024
69 #define FORMAT_SYSLOG PAL_T("EventId=%d: Priority=%s: ")
70
71 /* Combine prefix and convert input format from PAL_T to SYSLOG/printf */
72 #if defined(CONFIG_ENABLE_WCHAR)
73 PAL_INLINE PAL_Boolean _Convert(const TChar * in, char * out)
74 {
75 wchar_t wbuf[FORMATLENGTH];
76 wchar_t * fmt = 0;
77 memset(&wbuf, 0, sizeof(wbuf));
78 if (StrWcslcpy(out, FORMAT_SYSLOG, FORMATLENGTH) >= FORMATLENGTH)
79 return PAL_FALSE;
80 fmt = WFixupFormat(wbuf, PAL_COUNT(wbuf), in);
81 if (!fmt)
82 return PAL_FALSE;
83 if (StrWcslcat(out, wbuf, FORMATLENGTH) >= FORMATLENGTH)
84 return PAL_FALSE;
85 krisbash 1.1
86 return PAL_TRUE;
87 }
88 #else
89 PAL_INLINE PAL_Boolean _Convert(const TChar * in, char * out)
90 {
91 char buf[FORMATLENGTH];
92 char * fmt = 0;
93
94 memset(&buf, 0, sizeof(buf));
95 Strlcpy(out, FORMAT_SYSLOG, FORMATLENGTH);
96 fmt = FixupFormat(buf, PAL_COUNT(buf), in);
97 if (!fmt)
98 return PAL_FALSE;
99 if (Strlcat(out, buf, FORMATLENGTH) >= FORMATLENGTH)
100 return PAL_FALSE;
101
102 return PAL_TRUE;
103 }
104 #endif
105
106 krisbash 1.1 PAL_INLINE void _SyslogPut(
107 int priority,
108 const MI_Char* format,
109 ...)
110 {
111 char printfFormat[FORMATLENGTH];
112
113 if (_ShouldSyslog(priority) && _Convert(format, printfFormat) == PAL_TRUE)
114 {
115 OpenSysLogOnce();
116
117 va_list ap;
118 va_start(ap, format);
119 vsyslog(priority, printfFormat, ap);
120 va_end(ap);
121 }
122 }
123
124
125 #define SYSLOG_EVENT0(eventId, eventName, priority, format) \
126 PAL_INLINE void eventName() \
127 krisbash 1.1 { \
128 _SyslogPut(priority, format, eventId, #priority); \
129 }
130
131 #define SYSLOG_EVENT0(eventId, eventName, priority, format) \
132 PAL_INLINE void eventName() \
133 { \
134 _SyslogPut(priority, format, eventId, #priority); \
135 }
136
137 #define SYSLOG_EVENT1(eventId, eventName, priority, format, T0) \
138 PAL_INLINE void eventName(T0 a0) \
139 { \
140 _SyslogPut(priority, format, eventId, #priority, a0); \
141 }
142
143 #define SYSLOG_EVENT2(eventId, eventName, priority, format, T0, T1) \
144 PAL_INLINE void eventName(T0 a0, T1 a1) \
145 { \
146 _SyslogPut(priority, format, eventId, #priority, a0, a1); \
147 }
148 krisbash 1.1
149 #define SYSLOG_EVENT3(eventId, eventName, priority, format, T0, T1, T2) \
150 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2) \
151 { \
152 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2); \
153 }
154
155 #define SYSLOG_EVENT4(eventId, eventName, priority, format, T0, T1, T2, T3) \
156 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3) \
157 { \
158 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3); \
159 }
160
161 #define SYSLOG_EVENT5(eventId, eventName, priority, format, T0, T1, T2, T3, T4) \
162 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4) \
163 { \
164 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3, a4); \
165 }
166
167 #define SYSLOG_EVENT6(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5) \
168 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) \
169 krisbash 1.1 { \
170 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3, a4, a5); \
171 }
172
173 #define SYSLOG_EVENT7(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6) \
174 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) \
175 { \
176 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3, a4, a5, a6); \
177 }
178
179 #define SYSLOG_EVENT8(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7) \
180 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) \
181 { \
182 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3, a4, a5, a6, a7); \
183 }
184
185 #define SYSLOG_EVENT9(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8) \
186 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) \
187 { \
188 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3, a4, a5, a6, a7, a8); \
189 }
190 krisbash 1.1
191 #define SYSLOG_EVENT10(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) \
192 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) \
193 { \
194 _SyslogPut(priority, format, eventId, #priority, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); \
195 }
196
197 /* Debug versions that can be compiled out */
198
199 #if defined(CONFIG_ENABLE_DEBUG)
200 #define SYSLOG_EVENTD0(eventId, eventName, priority, format) \
201 SYSLOG_EVENT0(eventId, eventName, priority, format)
202 #else
203 #define SYSLOG_EVENTD0(eventId, eventName, priority, format) \
204 PAL_INLINE void eventName() {}
205 #endif
206
207 #if defined(CONFIG_ENABLE_DEBUG)
208 #define SYSLOG_EVENTD1(eventId, eventName, priority, format, T0) \
209 SYSLOG_EVENT1(eventId, eventName, priority, format, T0)
210 #else
211 krisbash 1.1 #define SYSLOG_EVENTD1(eventId, eventName, priority, format, T0) \
212 PAL_INLINE void eventName(T0 a0) {}
213 #endif
214
215 #if defined(CONFIG_ENABLE_DEBUG)
216 #define SYSLOG_EVENTD2(eventId, eventName, priority, format, T0, T1) \
217 SYSLOG_EVENT2(eventId, eventName, priority, format, T0, T1)
218 #else
219 #define SYSLOG_EVENTD2(eventId, eventName, priority, format, T0, T1) \
220 PAL_INLINE void eventName(T0 a0, T1 a1) {}
221 #endif
222
223 #if defined(CONFIG_ENABLE_DEBUG)
224 #define SYSLOG_EVENTD3(eventId, eventName, priority, format, T0, T1, T2) \
225 SYSLOG_EVENT3(eventId, eventName, priority, format, T0, T1, T2)
226 #else
227 #define SYSLOG_EVENTD3(eventId, eventName, priority, format, T0, T1, T2) \
228 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2) {}
229 #endif
230
231 #if defined(CONFIG_ENABLE_DEBUG)
232 krisbash 1.1 #define SYSLOG_EVENTD4(eventId, eventName, priority, format, T0, T1, T2, T3) \
233 SYSLOG_EVENT4(eventId, eventName, priority, format, T0, T1, T2, T3)
234 #else
235 #define SYSLOG_EVENTD4(eventId, eventName, priority, format, T0, T1, T2, T3) \
236 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3) {}
237 #endif
238
239 #if defined(CONFIG_ENABLE_DEBUG)
240 #define SYSLOG_EVENTD5(eventId, eventName, priority, format, T0, T1, T2, T3, T4) \
241 SYSLOG_EVENT5(eventId, eventName, priority, format, T0, T1, T2, T3, T4)
242 #else
243 #define SYSLOG_EVENTD5(eventId, eventName, priority, format, T0, T1, T2, T3, T4) \
244 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4) {}
245 #endif
246
247 #if defined(CONFIG_ENABLE_DEBUG)
248 #define SYSLOG_EVENTD6(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5) \
249 SYSLOG_EVENT6(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5)
250 #else
251 #define SYSLOG_EVENTD6(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5) \
252 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) {}
253 krisbash 1.1 #endif
254
255 #if defined(CONFIG_ENABLE_DEBUG)
256 #define SYSLOG_EVENTD7(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6) \
257 SYSLOG_EVENT7(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6)
258 #else
259 #define SYSLOG_EVENTD7(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6) \
260 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) {}
261 #endif
262
263 #if defined(CONFIG_ENABLE_DEBUG)
264 #define SYSLOG_EVENTD8(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7) \
265 SYSLOG_EVENT8(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7)
266 #else
267 #define SYSLOG_EVENTD8(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7) \
268 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) {}
269 #endif
270
271 #if defined(CONFIG_ENABLE_DEBUG)
272 #define SYSLOG_EVENTD9(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8) \
273 SYSLOG_EVENT9(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8)
274 krisbash 1.1 #else
275 #define SYSLOG_EVENTD9(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8) \
276 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) {}
277 #endif
278
279 #if defined(CONFIG_ENABLE_DEBUG)
280 #define SYSLOG_EVENTD10(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) \
281 SYSLOG_EVENT10(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
282 #else
283 #define SYSLOG_EVENTD10(eventId, eventName, priority, format, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) \
284 PAL_INLINE void eventName(T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) {}
285 #endif
286
287 END_EXTERNC
288
289 #endif /* _oi_syslog_h */
|