22 #ifndef _LOGRECORD_HH_
23 #define _LOGRECORD_HH_
28 #include <boost/thread.hpp>
29 #include <boost/archive/iterators/base64_from_binary.hpp>
30 #include <boost/archive/iterators/insert_linebreaks.hpp>
31 #include <boost/archive/iterators/transform_width.hpp>
32 #include <boost/archive/iterators/ostream_iterator.hpp>
33 #include <boost/filesystem.hpp>
42 #define GZ_LOG_VERSION "1.0"
82 public:
bool Init(
const std::string &_subdir);
96 public:
void Add(
const std::string &_name,
const std::string &_filename,
97 boost::function<
bool (std::ostringstream &)> _logCallback);
107 public:
bool Remove(
const std::string &_name);
113 public:
void Notify();
119 public:
void SetPaused(
bool _paused);
124 public:
bool GetPaused()
const;
129 public:
bool IsReadyToStart()
const;
133 public:
bool GetRunning()
const;
138 public:
bool Start(
const std::string &_encoding=
"zlib",
139 const std::string &_path=
"");
144 public:
const std::string &GetEncoding()
const;
149 public: std::string GetFilename(
const std::string &_name =
"")
const;
154 public:
unsigned int GetFileSize(
const std::string &_name =
"")
const;
158 public:
void SetBasePath(
const std::string &_path);
162 public: std::string GetBasePath()
const;
173 public:
bool GetFirstUpdate()
const;
177 public:
void Write(
bool _force =
false);
181 public:
unsigned int GetBufferSize()
const;
188 private:
void Update();
191 private:
void RunUpdate();
194 private:
void RunWrite();
197 private:
void ClearLogs();
200 private:
void PublishLogStatus();
204 private:
void OnLogControl(ConstLogControlPtr &_data);
209 private:
void Cleanup();
212 private:
void OnPause(
bool _pause);
223 public: Log(
LogRecord *_parent,
const std::string &_relativeFilename,
224 boost::function<
bool (std::ostringstream &)> _logCB);
227 public:
virtual ~Log();
231 public:
void Start(
const boost::filesystem::path &_path);
237 public:
void Write();
241 public:
unsigned int Update();
244 public:
void ClearBuffer();
248 public:
unsigned int GetBufferSize();
253 public: std::string GetRelativeFilename()
const;
257 public: std::string GetCompleteFilename()
const;
263 public: boost::function<bool (std::ostringstream &)> logCB;
266 public: std::string buffer;
269 public: std::ofstream logFile;
272 public: std::string relativeFilename;
275 private: boost::filesystem::path completePath;
281 private:
typedef std::map<std::string, Log*> Log_M;
287 private: Log_M::iterator updateIter;
290 private: Log_M::iterator logsEnd;
293 private: boost::condition_variable startThreadCondition;
296 private: boost::condition_variable updateCondition;
299 private: boost::condition_variable cleanupCondition;
302 private:
bool running;
305 private: boost::thread *writeThread;
308 private: boost::thread *updateThread;
311 private: boost::thread cleanupThread;
314 private:
mutable boost::mutex writeMutex;
317 private:
mutable boost::mutex runWriteMutex;
320 private:
mutable boost::mutex updateMutex;
323 private: boost::mutex controlMutex;
327 private: boost::condition_variable dataAvailableCondition;
330 private: boost::filesystem::path logBasePath;
333 private: boost::filesystem::path logCompletePath;
337 private: std::string logSubDir;
340 private: std::string encoding;
343 private:
bool initialized;
346 private:
bool paused;
349 private:
bool firstUpdate;
352 private:
bool stopThread;
373 private:
bool pauseState;
380 private:
bool readyToStart;