Akumuli
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
logger.h
1 
17 #pragma once
18 #include <mutex>
19 #include <sstream>
20 
21 #include <log4cxx/logger.h>
22 
23 #include <boost/circular_buffer.hpp>
24 
25 namespace Akumuli {
26 
27 namespace details {
28 
30  boost::circular_buffer<std::string> trace_;
31  std::mutex mutex_;
32 
33  CircularBuffer(size_t depth);
35 };
36 }
37 
38 class Formatter {
39 public:
40  enum SinkType {
41  LOGGER_INFO,
42  LOGGER_ERROR,
43  BUFFER,
44  NONE,
45  };
46 
47 private:
48  std::stringstream str_;
49  // Optional parameters
50  SinkType sink_;
51  log4cxx::LoggerPtr logger_;
52  details::CircularBuffer* buffer_;
53 
54 public:
55  Formatter();
56 
57  ~Formatter();
58 
59  void set_info_sink(log4cxx::LoggerPtr logger);
60  void set_trace_sink(details::CircularBuffer* buffer);
61  void set_error_sink(log4cxx::LoggerPtr logger, details::CircularBuffer* buffer);
62 
63  template <class T> Formatter& operator<<(T const& value) {
64  str_ << value;
65  return *this;
66  }
67 };
68 
71 class Logger {
73  log4cxx::LoggerPtr plogger_;
74 
75 public:
76  Logger(const char* log_name, int depth);
77 
78  Formatter&& trace(Formatter&& fmt = Formatter());
79  Formatter&& info(Formatter&& fmt = Formatter());
80  Formatter&& error(Formatter&& fmt = Formatter());
81 
82  static void init(std::string path);
83 };
84 }
Definition: logger.h:29
Definition: logger.h:38
Definition: log_iface.h:9