Advertisement
Guest User

Untitled

a guest
Jan 20th, 2015
391
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.98 KB | None | 0 0
  1. #ifndef LOGGING_H
  2. #define LOGGING_H
  3.  
  4. #include <fstream>
  5. #include <sstream>
  6. #include <string>
  7. #include <map>
  8. #include <list>
  9. using namespace std;
  10.  
  11. typedef map<string, string> Record;
  12.  
  13. typedef enum _Level {
  14. DEBUG = 0x00,
  15. INFO = 0x01,
  16. WARNING = 0x02,
  17. _ERROR = 0x03,
  18. CRITICAL = 0x04
  19. } Level;
  20.  
  21. // Форматтер
  22. class Formatter {
  23. public:
  24. Formatter(string);
  25.  
  26. string get_string(Record &);
  27. string get_time();
  28. void set_time_format(string);
  29.  
  30. private:
  31. string format;
  32. string time_format;
  33. };
  34.  
  35. // Обработчик
  36. class BaseHandler {
  37. public:
  38. BaseHandler(string = string());
  39. virtual ~BaseHandler();
  40.  
  41. void set_formatter(Formatter *);
  42. virtual void log(Level, Record &);
  43.  
  44. protected:
  45. virtual void fflush(Level, string &) = 0;
  46.  
  47. protected:
  48. Formatter *formatter;
  49. string name;
  50. };
  51.  
  52. class Logger;
  53. // Менеджер
  54. class Log {
  55. public:
  56. Log(Level, stringstream &, Logger *);
  57. ~Log();
  58.  
  59. template<typename T>
  60. Log& operator<<(T v) {
  61. buffer << v;
  62. fflush();
  63. return *this;
  64. }
  65.  
  66. void fflush();
  67.  
  68. private:
  69. stringstream &buffer;
  70. Level level;
  71. Logger *logger;
  72. };
  73.  
  74. class Logger {
  75. public:
  76. Logger(string);
  77. ~Logger();
  78.  
  79. void add_handler(BaseHandler*);
  80. void fflush(Level, Record &);
  81.  
  82. public:
  83. Log& debug();
  84. Log& info();
  85. Log& warning();
  86. Log& error();
  87. Log& critical();
  88.  
  89. template <typename T>
  90. void set_param(string pname, T pvalue) {
  91. stringstream ss;
  92. ss << pvalue;
  93. last_param_name = pname;
  94. last_param_value = append_rec[pname];
  95. append_rec[pname] = ss.str();
  96. }
  97. template <typename T>
  98. void set_single_param(string pname, T pvalue) {
  99. set_param(pname, pvalue);
  100. is_single_param = true;
  101. }
  102. void restore_param() {
  103. append_rec[last_param_name] = last_param_value;
  104. is_single_param = false;
  105. }
  106.  
  107. inline void remove_param(string pname) {
  108. append_rec.erase(pname);
  109. }
  110.  
  111. private:
  112. bool is_single_param;
  113. string last_param_name;
  114. string last_param_value;
  115. string name;
  116. stringstream *stream;
  117. list<BaseHandler*> handlers;
  118. Log *_debug;
  119. Log *_info;
  120. Log *_warning;
  121. Log *_error;
  122. Log *_critical;
  123. Record append_rec;
  124. };
  125.  
  126. // Базовый класс для работы с системой логирования
  127. class LogManager {
  128. public:
  129. static LogManager* get_logging();
  130. void add_handler(BaseHandler *);
  131. static void set_level(Level);
  132. static Level get_level();
  133. Logger* get_logger(string = "ROOT");
  134.  
  135.  
  136. private:
  137. LogManager();
  138. ~LogManager();
  139.  
  140. private:
  141. static LogManager *base;
  142. list<BaseHandler*> handlers;
  143. static Level custom_level;
  144. map<string, Logger*> loggers;
  145. };
  146.  
  147. // Хендлеры
  148. // Консольный
  149. class ConsoleHandler : public BaseHandler {
  150. public:
  151. ConsoleHandler();
  152. virtual ~ConsoleHandler();
  153.  
  154. protected:
  155. virtual void fflush(Level, string &);
  156. };
  157.  
  158. // Файловый
  159. class FileHandler : public BaseHandler {
  160. public:
  161. FileHandler(string);
  162. virtual ~FileHandler();
  163.  
  164. protected:
  165. virtual void fflush(Level, string &);
  166.  
  167. private:
  168. string file_path;
  169. fstream fs;
  170. };
  171.  
  172. #endif // LOGGING_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement