PTLib Version 2.12.9

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
syslog.h
Go to the documentation of this file.
1 /*
2 * syslog.h
3 *
4 * System Logging class.
5 *
6 * Portable Tools Library
7 *
8 * Copyright (c) 2009 Equivalence Pty. Ltd.
9 *
10 * The contents of this file are subject to the Mozilla Public License
11 * Version 1.0 (the "License"); you may not use this file except in
12 * compliance with the License. You may obtain a copy of the License at
13 * http://www.mozilla.org/MPL/
14 *
15 * Software distributed under the License is distributed on an "AS IS"
16 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17 * the License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * The Original Code is Portable Windows Library.
21 *
22 * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23 *
24 * Contributor(s): ______________________________________.
25 *
26 * $Revision: 28920 $
27 * $Author: rjongbloed $
28 * $Date: 2013-01-18 11:01:31 +1100 (Fri, 18 Jan 2013) $
29 */
30
31 #ifndef _PSYSTEMLOG
32 #define _PSYSTEMLOG
33
34 #ifdef P_USE_PRAGMA
35 #pragma interface
36 #endif
37
38 #include "ptlib/udpsock.h"
39
40 class PSystemLogTarget;
41
42
47 class PSystemLog : public PObject, public P_IOSTREAM
48 {
49 PCLASSINFO(PSystemLog, PObject);
50 public:
53
54 P_DECLARE_ENUM_EX(Level,NumLogLevels,
55 StdError,-1,
56 Fatal,
57 Error,
58 Warning,
59 Info,
60 Debug,
61 Debug2,
62 Debug3,
63 Debug4,
64 Debug5,
65 Debug6
66 );
67
69 PSystemLog(
70 Level level = NumLogLevels
71 );
72
74 ~PSystemLog() { flush(); }
76
81 static PSystemLogTarget & GetTarget();
82
85 static void SetTarget(
86 PSystemLogTarget * target,
87 bool autoDelete = true
88 );
90
91 private:
92 PSystemLog(const PSystemLog & other);
93 PSystemLog & operator=(const PSystemLog &);
94
95 class Buffer : public streambuf {
96 public:
97 Buffer();
98 virtual int_type overflow(int_type=EOF);
99 virtual int_type underflow();
100 virtual int sync();
101 PSystemLog * m_log;
102 PCharArray m_string;
103 } m_buffer;
104 friend class Buffer;
105
106 Level m_logLevel;
107
108 friend class PSystemLogTarget;
109 };
110
111
112 class PSystemLogTarget : public PObject
113 {
114 PCLASSINFO(PSystemLogTarget, PObject);
115 public:
118 PSystemLogTarget();
120
126 void SetThresholdLevel(
127 PSystemLog::Level level
128 ) { m_thresholdLevel = level; }
129
135 PSystemLog::Level GetThresholdLevel() const { return m_thresholdLevel; }
137
138 protected:
143 virtual void Output(
144 PSystemLog::Level level,
145 const char * msg
146 ) = 0;
147
150 void OutputToStream(
151 ostream & strm,
152 PSystemLog::Level level,
153 const char * msg
154 );
156
157 protected:
158 PSystemLog::Level m_thresholdLevel;
159
160 private:
161 PSystemLogTarget(const PSystemLogTarget & other);
162 PSystemLogTarget & operator=(const PSystemLogTarget &);
163
164 friend class PSystemLog::Buffer;
165 };
166
167
170 class PSystemLogToNowhere : public PSystemLogTarget
171 {
172 PCLASSINFO(PSystemLogToNowhere, PSystemLogTarget);
173 public:
174 virtual void Output(PSystemLog::Level, const char *)
175 {
176 }
177 };
178
179
182 class PSystemLogToStderr : public PSystemLogTarget
183 {
184 PCLASSINFO(PSystemLogToStderr, PSystemLogTarget);
185 public:
190 virtual void Output(
191 PSystemLog::Level level,
192 const char * msg
193 );
195 };
196
197
198 #if PTRACING
199
201 class PSystemLogToTrace : public PSystemLogTarget
202 {
203 PCLASSINFO(PSystemLogToTrace, PSystemLogTarget);
204 public:
207 PSystemLogToTrace();
209
214 virtual void Output(
215 PSystemLog::Level level,
216 const char * msg
217 );
219 };
220 #endif
221
222
225 class PSystemLogToFile : public PSystemLogTarget
226 {
227 PCLASSINFO(PSystemLogToFile, PSystemLogTarget);
228 public:
231 PSystemLogToFile(
232 const PString & filename
233 );
235
240 virtual void Output(
241 PSystemLog::Level level,
242 const char * msg
243 );
245
250 const PFilePath & GetFilePath() const { return m_file.GetFilePath(); }
252
253 protected:
254 PTextFile m_file;
255 };
256
257
260 class PSystemLogToNetwork : public PSystemLogTarget
261 {
262 PCLASSINFO(PSystemLogToNetwork, PSystemLogTarget);
263 public:
264 enum { RFC3164_Port = 514 };
265
268 PSystemLogToNetwork(
269 const PIPSocket::Address & address,
270 WORD port = RFC3164_Port,
271 unsigned facility = 16
272 );
273 PSystemLogToNetwork(
274 const PString & server,
275 WORD port = RFC3164_Port,
276 unsigned facility = 16
277 );
279
284 virtual void Output(
285 PSystemLog::Level level,
286 const char * msg
287 );
289
290 protected:
291 PIPSocket::AddressAndPort m_server;
292 unsigned m_facility;
293 PUDPSocket m_socket;
294 };
295
296
297 #ifdef WIN32
298
300 class PSystemLogToDebug : public PSystemLogTarget
301 {
302 PCLASSINFO(PSystemLogToDebug, PSystemLogTarget);
303 public:
308 virtual void Output(
309 PSystemLog::Level level,
310 const char * msg
311 );
313 };
314 #elif !defined(P_VXWORKS)
315
317 class PSystemLogToSyslog : public PSystemLogTarget
318 {
319 PCLASSINFO(PSystemLogToSyslog, PSystemLogTarget);
320 public:
323 PSystemLogToSyslog(
324 const char * ident = NULL,
325 int priority = -1,
327 int options = -1,
328 int facility = -1
329 );
330
331 ~PSystemLogToSyslog();
333
338 virtual void Output(
339 PSystemLog::Level level,
340 const char * msg
341 );
343
344 protected:
345 PString m_ident;
346 int m_priority;
347 };
348 #endif
349
350
355 #define PSYSTEMLOG(level, variables) \
356 if (PSystemLog::GetTarget().GetThresholdLevel() >= PSystemLog::level) { \
357 PSystemLog P_systemlog(PSystemLog::level); \
358 P_systemlog << variables; \
359 } else (void)0
360
361
362 #endif
363
364
365 // End Of File ///////////////////////////////////////////////////////////////