#include "CmLog.h" #include "boost/signal.hpp" void dbg_VSLog(const CamelotFramework::String& message); namespace CamelotFramework { LogEntry::LogEntry(const String& msg, const String& level) :mMsg(msg), mChannel(level) { } Log::Log(const String& logFilePath, bool autoSave, bool suppressFileOutput) :mAutoSave(autoSave), mSuppressFileOutput(suppressFileOutput), mSaveFilePath(logFilePath) { } Log::~Log() { flush(); for(auto iter = mEntries.begin(); iter != mEntries.end(); ++iter) cm_delete(*iter); } void Log::logMsg(const String& message, const String& level) { LogEntry* newEntry = cm_new(message, level); mEntries.push_back(newEntry); doOnEntryAdded(*newEntry); dbg_VSLog(message); if(mAutoSave) flush(); } void Log::clear() { for(auto iter = mEntries.begin(); iter != mEntries.end(); ++iter) cm_delete(*iter); mEntries.clear(); if(mAutoSave) flush(); } void Log::flush() { if(mSuppressFileOutput) return; // TODO - Write to disk and throw exception if it can't } void Log::doOnEntryAdded(const LogEntry& entry) { onEntryAdded(entry); } } // TODO: Debug only - Remove later #include void dbg_VSLog(const CamelotFramework::String& message) { OutputDebugString(message.c_str()); OutputDebugString("\n"); }