1 // Copyright (C) 2005-2010 Angelo Naselli, Penta Engineering s.r.l.
2 //
3 // This program is free software; you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation; either version 2 of the License, or
6 // (at your option) any later version.
7 //
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 // GNU General Public License for more details.
11 //
12 // You should have received a copy of the GNU General Public License
13 // along with this program; if not, write to the Free Software
14 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15 //
16 // As a special exception, you may use this file as part of a free software
17 // library without restriction. Specifically, if other files instantiate
18 // templates or use macros or inline functions from this file, or you compile
19 // this file and link it with other files to produce an executable, this
20 // file does not by itself cause the resulting executable to be covered by
21 // the GNU General Public License. This exception does not however
22 // invalidate any other reasons why the executable file might be covered by
23 // the GNU General Public License.
24 //
25 // This exception applies only to the code released under the name GNU
26 // Common C++. If you copy code from other releases into a copy of GNU
27 // Common C++, as the General Public License permits, the exception does
28 // not apply to the code that you add in this way. To avoid misleading
29 // anyone as to the status of such modified files, you must delete
30 // this exception notice from them.
31 //
32 // If you write modifications of your own for GNU Common C++, it is your choice
33 // whether to permit this exception to apply to your modifications.
34 // If you do not wish that, delete this exception notice.
35 //
36
43 #ifndef ___APPLOG_H___
44 #define ___APPLOG_H___
45
46 #ifndef CCXX_SLOG_H_
48 #endif
49
51
52 #include <string>
53 #include <sstream>
54 #include <iostream>
55 #include <map>
56
57 #ifdef CCXX_NAMESPACES
58 using namespace std;
59
60 namespace ost
61 {
62 #endif
63
72 {
73 protected:
78
79 public:
80 // max_len: max number of bytes to be printed. 0 prints all.
89 HEXdump(
const unsigned char *buffer,
int buff_len,
int max_len = 200);
90
95
101 {
102 return _str.c_str();
103 }
104
109 {
110 return _str;
111 }
112
119 {
121 return out;
122 }
123
124 };
125
126 #ifdef CCXX_EXCEPTIONS
127
131 class __EXPORT AppLogException :
public ost::Exception
132 {
133 public:
138 AppLogException(const std::string &what_arg) : ost::Exception(what_arg) {};
139
140 };
141 #endif
142
143 class AppLogPrivate;
144
174 {
175 protected:
176 // d pointer
178 void writeLog(bool endOfLine = true);
179 static map<string, Slog::Level> *
assoc;
180
181 public:
186 {
187 private:
189 public:
190
195
200
205
209 Ident(
const char *str) : _ident(str) {};
210
214 std::string&
str() {
return _ident;}
215
219 Ident& operator= (std::string &st) {_ident = st;
return *
this;}
220
224 Ident& operator= (
const char str[]) {_ident = str;
return *
this;}
225
229 const char*
c_str() {
return _ident.c_str();}
230 };
231
232 #ifndef WIN32
233
240 AppLog(
const char* logFileName = NULL,
bool logDirectly =
false ,
bool usePipe =
false);
241 #else
242
248 AppLog(
const char* logFileName = NULL,
bool logDirectly =
false);
249 #endif
250
254
259 void subscribe();
260
264 void unsubscribe();
265
266 #ifndef WIN32
267
274 void logFileName(const char* FileName, bool logDirectly = false, bool usePipe = false);
275 #else
276
282 void logFileName(const char* FileName, bool logDirectly = false);
283 #endif
284
287 void close(void);
288
294
299 void clogEnable(bool en = true);
300
305 void slogEnable(bool en = true);
306
312 void identLevel(
const char *ident,
Slog::Level level);
313
318 void open(const char *ident);
319
325 virtual int overflow(int c);
326
330 virtual int sync();
331
332 #ifdef HAVE_SNPRINTF
333
338 void emerg(
const char *format, ...);
339
344 void alert(
const char *format, ...);
345
350 void critical(
const char *format, ...);
351
356 void error(
const char *format, ...);
357
362 void warn(
const char *format, ...);
363
368 void notice(
const char *format, ...);
369
374 void info(
const char *format, ...);
375
380 void debug(
const char *format, ...);
381 #endif
382
390
397 {
399 return *this;
400 }
401
408
415
422
424 {
425 return al;
426 }
427
434 {
436 return *this;
437 }
438
439
446
453
460
467
474
481
488
495
512 {
513 map<string, Slog::Level>::iterator it = assoc->find(name);
514
516 }
517
518 };
519
527
535
543
551
559
567
575
583
588
589 #ifdef CCXX_NAMESPACES
590 } //namespace
591 #endif
592
593 #endif //___APPLOG_H___
AppLog & error(void)
error level
std::string str()
string cast provided for conveneince.
static Slog::Level levelTranslate(string name)
Translates level from string to Slog::Level, useful for configuration files for instance.
std::string & str()
std::string cast.
__EXPORT AppLog & debug(AppLog &sl)
Manipulator for debug level.
__EXPORT AppLog & error(AppLog &sl)
Manipulator for error level.
const char * c_str()
const char* cast provided for conveneince.
__EXPORT AppLog & info(AppLog &sl)
Manipulator for info level.
Ident(Ident &id)
Copy constructor.
Ident(const char *str)
const char* constructor, provided for convenience.
static map< string, Slog::Level > * assoc
GNU Common C++ exception model base classes.
AppLog & warn(void)
warn level
__EXPORT std::ostream & operator<<(std::ostream &os, const IPV4Address &ia)
AppLog & critical(void)
critical level
Produces a dump of a buffer in a hexdump way with its code Ascii translation and relative buffer addr...
const char * c_str() const
const char* cast provided for conveneince.
__EXPORT AppLog & emerg(AppLog &sl)
Manipulator for emerg level.
AppLog & debug(void)
debug level
__EXPORT AppLog & notice(AppLog &sl)
Manipulator for notice level.
virtual ~HEXdump()
HEXdump destructor.
AppLog & emerg(void)
emerg level
Ident class that represents module name.
AppLog & operator()(Ident &ident)
operator to change ident
__EXPORT AppLog & alert(AppLog &sl)
Manipulator for alert level.
__EXPORT AppLog alog
alog global log stream definition
System logging facilities abstraction.
AppLog & notice(void)
notice level
std::string _str
output string
Application logger is a class that implements a logger that can be used by applications to save log f...
AppLog & info(void)
info level
__EXPORT AppLog & warn(AppLog &sl)
Manipulator for warn level.
__EXPORT AppLog & critical(AppLog &sl)
Manipulator for critical level.
AppLog & alert(void)
alert level