MyGUI  3.2.1
MyGUI_LogManager.cpp
Go to the documentation of this file.
00001 /*
00002  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
00003  * Distributed under the MIT License
00004  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
00005  */
00006 
00007 #include "MyGUI_Precompiled.h"
00008 #include "MyGUI_LogManager.h"
00009 #include "MyGUI_FileLogListener.h"
00010 #include "MyGUI_ConsoleLogListener.h"
00011 #include "MyGUI_LevelLogFilter.h"
00012 #include "MyGUI_LogSource.h"
00013 #include <time.h>
00014 
00015 namespace MyGUI
00016 {
00017 
00018     LogManager* LogManager::msInstance = nullptr;
00019 
00020     LogManager::LogManager() :
00021         mConsole(nullptr),
00022         mFile(nullptr),
00023         mFilter(nullptr),
00024         mDefaultSource(nullptr),
00025         mLevel(LogLevel::Info),
00026         mConsoleEnable(true)
00027     {
00028         msInstance = this;
00029     }
00030 
00031     LogManager::~LogManager()
00032     {
00033         flush();
00034         close();
00035 
00036         delete mDefaultSource;
00037         mDefaultSource = nullptr;
00038         delete mConsole;
00039         mConsole = nullptr;
00040         delete mFile;
00041         mFile = nullptr;
00042         delete mFilter;
00043         mFilter = nullptr;
00044 
00045         msInstance = nullptr;
00046     }
00047 
00048     LogManager& LogManager::getInstance()
00049     {
00050         if (msInstance == nullptr)
00051         {
00052             MYGUI_DBG_BREAK;
00053             MYGUI_BASE_EXCEPT("Singleton instance LogManager was not created", "MyGUI");
00054         }
00055         return *msInstance;
00056     }
00057 
00058     LogManager* LogManager::getInstancePtr()
00059     {
00060         return msInstance;
00061     }
00062 
00063     void LogManager::flush()
00064     {
00065         for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
00066             (*item)->flush();
00067     }
00068 
00069     void LogManager::log(const std::string& _section, LogLevel _level, const std::string& _message, const char* _file, int _line)
00070     {
00071         time_t ctTime;
00072         time(&ctTime);
00073         struct tm* currentTime;
00074         currentTime = localtime(&ctTime);
00075 
00076         for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
00077             (*item)->log(_section, _level, currentTime, _message, _file, _line);
00078     }
00079 
00080     void LogManager::close()
00081     {
00082         for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
00083             (*item)->close();
00084     }
00085 
00086     void LogManager::addLogSource(LogSource* _source)
00087     {
00088         mSources.push_back(_source);
00089     }
00090 
00091     void LogManager::createDefaultSource(const std::string& _logname)
00092     {
00093         mConsole = new ConsoleLogListener();
00094         mFile = new FileLogListener();
00095         mFilter = new LevelLogFilter();
00096 
00097         mFile->setFileName(_logname);
00098         mConsole->setEnabled(mConsoleEnable);
00099         mFilter->setLoggingLevel(mLevel);
00100 
00101         mDefaultSource = new LogSource();
00102         mDefaultSource->addLogListener(mFile);
00103         mDefaultSource->addLogListener(mConsole);
00104         mDefaultSource->setLogFilter(mFilter);
00105 
00106         mDefaultSource->open();
00107 
00108         LogManager::getInstance().addLogSource(mDefaultSource);
00109     }
00110 
00111     void LogManager::setSTDOutputEnabled(bool _value)
00112     {
00113         mConsoleEnable = _value;
00114 
00115         if (mConsole != nullptr)
00116             mConsole->setEnabled(_value);
00117     }
00118 
00119     bool LogManager::getSTDOutputEnabled() const
00120     {
00121         return mConsoleEnable;
00122     }
00123 
00124     void LogManager::setLoggingLevel(LogLevel _value)
00125     {
00126         mLevel = _value;
00127 
00128         if (mFilter != nullptr)
00129             mFilter->setLoggingLevel(_value);
00130     }
00131 
00132     LogLevel LogManager::getLoggingLevel() const
00133     {
00134         return mLevel;
00135     }
00136 
00137 } // namespace MyGUI