ANNA Suite  2020b
Multipurpose development suite for Telco applications
TraceWriter.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_TraceWriter_hpp
10 #define anna_core_tracing_TraceWriter_hpp
11 
12 #include <vector>
13 
14 #include <anna/core/mt/NRMutex.hpp>
16 #include <anna/config/defines.hpp>
18 
19 namespace anna {
20 
21 class Configuration;
22 class TraceWriterObserver;
23 
28 class TraceWriter : public Logger::Writer {
29 public:
30  static const int DefaultMaxKBSize = 4192 * 1024;
31 
37  TraceWriter();
38 
44  TraceWriter(const char* fileName, const int maxSize);
45 
50  int getMaxSize() const { return a_maxSize; }
51 
73  void setup(const char* fileName, const Configuration& configuration) ;
74 
87  void setup(const char* fileName, const int maxSize = 0, const bool clean = true) ;
88 
92  void printResume() ;
93 
106  void attach(TraceWriterObserver* observer) ;
107 
108 private:
109  typedef std::vector <TraceWriterObserver*>::iterator observer_iterator;
110 
111  static const int ErrorStream = 2;
112 
113  class GuardNoLog {
114  public:
115  GuardNoLog(NRMutex& mutex) : a_mutex(mutex) { mutex.lock(); }
116  ~GuardNoLog() { a_mutex.unlock(); }
117  private:
118  NRMutex& a_mutex;
119  };
120 
121  std::string a_outputFile;
122  std::string a_outputOldFile;
123  int a_maxSize;
124  int a_stream;
125  Microsecond a_lastTime;
126  std::string a_date;
127  NRMutex a_mutex;
128  std::vector <TraceWriterObserver*> a_observers;
129  bool a_observed;
130 
131  observer_iterator observer_begin() { return a_observers.begin(); }
132  observer_iterator observer_end() { return a_observers.end(); }
133 
134  static TraceWriterObserver* observer(observer_iterator& ii) { return *ii; }
135 
136  void initialize(const char*) { printResume(); }
137  void do_write(int level, const char* text, ...) ;
138  const char* getDate() ;
139  int prepareOutput(const char* date) ;
140 };
141 
142 }
143 
144 #endif
int getMaxSize() const
Definition: TraceWriter.hpp:50
void setup(const char *fileName, const Configuration &configuration)
Definition: NRMutex.hpp:39
static const int DefaultMaxKBSize
Definition: TraceWriter.hpp:30
virtual void lock() noexcept(false)
Definition: Logger.hpp:53
Definition: app.hpp:12
Definition: TraceWriterObserver.hpp:27
Definition: Configuration.hpp:27
Definition: TraceWriter.hpp:28
void attach(TraceWriterObserver *observer)
Definition: Microsecond.hpp:22