ANNA Suite  2020b
Multipurpose development suite for Telco applications
Logger.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_core_tracing_Logger_hpp
10 #define anna_core_tracing_Logger_hpp
11 
12 #include <syslog.h>
13 
14 #ifdef _MT
15 #include <pthread.h>
16 #endif
17 
18 #include <anna/core/mt/NRMutex.hpp>
19 #include <anna/core/mt/Guard.hpp>
20 
21 namespace anna {
22 
23 class DataBlock;
24 
30 class Logger {
31 public:
39  enum Level {
40  Emergency = LOG_EMERG,
41  Alert = LOG_ALERT, Critical = LOG_CRIT, Error = LOG_ERR, Warning = LOG_WARNING,
42  Notice = LOG_NOTICE, Information = LOG_INFO, Debug = LOG_DEBUG,
43  Local0 = LOG_LOCAL0, Local1 = LOG_LOCAL1, Local2 = LOG_LOCAL2, Local3 = LOG_LOCAL3,
44  Local4 = LOG_LOCAL4, Local5 = LOG_LOCAL5, Local6 = LOG_LOCAL6, Local7 = LOG_LOCAL7
45  };
46 
53  class Writer {
54  public:
58  virtual ~Writer();
59 
66  virtual void initialize(const char* id) = 0;
67 
78  virtual void do_write(int level, const char* text, ...) = 0;
79 
80  protected:
86  Writer(const int bufferSize);
87 
91  Writer();
92 
97  DataBlock& getDataBlock() { return *a_dataBlock; }
98 
99  private:
100  DataBlock* a_dataBlock;
101  };
102 
119  static void initialize(const char* ident) ;
120 
138  static void initialize(const char* ident, Writer* writer) ;
139 
143  static Level getLevel() { return st_level; }
144 
155  static void setLevel(const Level level)
156  noexcept(false) {
157  Guard guard(st_mutex, "Logger::setLevel");
158  st_level = (level <= Error) ? Error : level;
159  }
160 
169  static bool isActive(const Level level) {
170  return (st_writer != NULL && level <= Error) ? true : (st_enabled && level <= st_level && st_writer != NULL);
171  }
172 
176  static void disable() noexcept(false);
177 
182  static void enable() noexcept(false);
183 
191  static void showPID(const bool show) ;
192 
204  static void write(const Level level, const char* text, const char* fromFile, const int fromLine) ;
205 
217  static void write(const Level level, const std::string& text, const char* fromFile, const int fromLine) {
218  write(level, text.c_str(), fromFile, fromLine);
219  }
220 
233  static void write(const Level level, const char* text, const char* value, const char* fromFile, const int fromLine) ;
234 
247  static void write(const Level level, const char* text, const std::string& value, const char* fromFile, const int fromLine)
248  {
249  write(level, text, value.c_str(), fromFile, fromLine);
250  }
251 
264  static void write(const Level level, const std::string& text, const std::string& value, const char* fromFile, const int fromLine)
265  {
266  write(level, text.c_str(), value.c_str(), fromFile, fromLine);
267  }
268 
281  static void write(const Level level, const char* text, const int value, const char* fromFile, const int fromLine)
282  ;
283 
296  static void write(const Level level, const char* text, const DataBlock& value, const char* fromFile, const int fromLine)
297  ;
298 
305  static void debug(const std::string& text, const char* fromFile, const int fromLine)
306  {
307  write(Logger::Debug, text, fromFile, fromLine);
308  }
309 
316  static void information(const std::string& text, const char* fromFile, const int fromLine)
317  {
318  write(Logger::Information, text, fromFile, fromLine);
319  }
320 
327  static void notice(const std::string& text, const char* fromFile, const int fromLine)
328  {
329  write(Logger::Notice, text, fromFile, fromLine);
330  }
331 
338  static void warning(const std::string& text, const char* fromFile, const int fromLine)
339  {
340  write(Logger::Warning, text, fromFile, fromLine);
341  }
342 
349  static void error(const std::string& text, const char* fromFile, const int fromLine)
350  {
351  write(Logger::Error, text, fromFile, fromLine);
352  }
353 
360  static void critical(const std::string& text, const char* fromFile, const int fromLine)
361  {
362  write(Logger::Critical, text, fromFile, fromLine);
363  }
364 
371  static void alert(const std::string& text, const char* fromFile, const int fromLine)
372  {
373  write(Logger::Alert, text, fromFile, fromLine);
374  }
375 
382  static void emergency(const std::string& text, const char* fromFile, const int fromLine)
383  {
384  write(Logger::Emergency, text, fromFile, fromLine);
385  }
386 
391  static const char* asString(const Level level) ;
392 
400  static Level asLevel(const char* level) noexcept(false);
401 
402 private:
403  static NRMutex st_mutex;
404  static Level st_level;
405  static bool st_enabled;
406  static Writer* st_writer;
407 
408 #ifndef _MT
409  static pid_t st_pid;
410 #endif
411 
412  Logger();
413 
414  friend class Logger::Writer;
415 };
416 
417 } //namespace anna
418 
419 #endif
420 
421 
Definition: Logger.hpp:42
static void setLevel(const Level level) noexcept(false)
Definition: Logger.hpp:155
Definition: Logger.hpp:40
Definition: Logger.hpp:43
virtual void do_write(int level, const char *text,...)=0
static void notice(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:327
Level
Definition: Logger.hpp:39
static void debug(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:305
static void information(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:316
Definition: Logger.hpp:44
Definition: Logger.hpp:41
Definition: NRMutex.hpp:39
Definition: Logger.hpp:30
Definition: Logger.hpp:42
static void emergency(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:382
static const char * asString(const Level level)
static Level getLevel()
Definition: Logger.hpp:143
static void alert(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:371
static void warning(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:338
Definition: Logger.hpp:44
Definition: Logger.hpp:43
static void disable() noexcept(false)
Definition: Logger.hpp:42
Definition: Logger.hpp:41
Definition: Logger.hpp:44
Definition: Logger.hpp:53
Definition: Logger.hpp:43
Definition: Logger.hpp:41
static void showPID(const bool show)
Definition: Logger.hpp:44
static void critical(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:360
static void error(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:349
Definition: app.hpp:12
Definition: Guard.hpp:35
static void write(const Level level, const std::string &text, const std::string &value, const char *fromFile, const int fromLine)
Definition: Logger.hpp:264
DataBlock & getDataBlock()
Definition: Logger.hpp:97
Definition: Logger.hpp:41
static void enable() noexcept(false)
static void write(const Level level, const char *text, const char *fromFile, const int fromLine)
virtual void initialize(const char *id)=0
Definition: DataBlock.hpp:24
static void write(const Level level, const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:217
static Level asLevel(const char *level) noexcept(false)
static bool isActive(const Level level)
Definition: Logger.hpp:169
static void write(const Level level, const char *text, const std::string &value, const char *fromFile, const int fromLine)
Definition: Logger.hpp:247
Definition: Logger.hpp:43