MyGUI  3.2.0
MyGUI_LogManager.cpp
Go to the documentation of this file.
00001 
00006 /*
00007     This file is part of MyGUI.
00008 
00009     MyGUI is free software: you can redistribute it and/or modify
00010     it under the terms of the GNU Lesser General Public License as published by
00011     the Free Software Foundation, either version 3 of the License, or
00012     (at your option) any later version.
00013 
00014     MyGUI is distributed in the hope that it will be useful,
00015     but WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017     GNU Lesser General Public License for more details.
00018 
00019     You should have received a copy of the GNU Lesser General Public License
00020     along with MyGUI.  If not, see <http://www.gnu.org/licenses/>.
00021 */
00022 #include "MyGUI_Precompiled.h"
00023 #include "MyGUI_LogManager.h"
00024 #include "MyGUI_FileLogListener.h"
00025 #include "MyGUI_ConsoleLogListener.h"
00026 #include "MyGUI_LevelLogFilter.h"
00027 #include "MyGUI_LogSource.h"
00028 #include <time.h>
00029 
00030 namespace MyGUI
00031 {
00032 
00033     LogManager* LogManager::msInstance = nullptr;
00034 
00035     LogManager::LogManager() :
00036         mConsole(nullptr),
00037         mFile(nullptr),
00038         mFilter(nullptr),
00039         mDefaultSource(nullptr),
00040         mLevel(LogLevel::Info),
00041         mConsoleEnable(true)
00042     {
00043         msInstance = this;
00044     }
00045 
00046     LogManager::~LogManager()
00047     {
00048         flush();
00049         close();
00050 
00051         delete mDefaultSource;
00052         mDefaultSource = nullptr;
00053         delete mConsole;
00054         mConsole = nullptr;
00055         delete mFile;
00056         mFile = nullptr;
00057         delete mFilter;
00058         mFilter = nullptr;
00059 
00060         msInstance = nullptr;
00061     }
00062 
00063     LogManager& LogManager::getInstance()
00064     {
00065         if (msInstance == nullptr)
00066         {
00067             MYGUI_DBG_BREAK;
00068             MYGUI_BASE_EXCEPT("Singleton instance LogManager was not created", "MyGUI");
00069         }
00070         return *msInstance;
00071     }
00072 
00073     LogManager* LogManager::getInstancePtr()
00074     {
00075         return msInstance;
00076     }
00077 
00078     void LogManager::flush()
00079     {
00080         for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
00081             (*item)->flush();
00082     }
00083 
00084     void LogManager::log(const std::string& _section, LogLevel _level, const std::string& _message, const char* _file, int _line)
00085     {
00086         time_t ctTime;
00087         time(&ctTime);
00088         struct tm* currentTime;
00089         currentTime = localtime(&ctTime);
00090 
00091         for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
00092             (*item)->log(_section, _level, currentTime, _message, _file, _line);
00093     }
00094 
00095     void LogManager::close()
00096     {
00097         for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
00098             (*item)->close();
00099     }
00100 
00101     void LogManager::addLogSource(LogSource* _source)
00102     {
00103         mSources.push_back(_source);
00104     }
00105 
00106     void LogManager::createDefaultSource(const std::string& _logname)
00107     {
00108         mConsole = new ConsoleLogListener();
00109         mFile = new FileLogListener();
00110         mFilter = new LevelLogFilter();
00111 
00112         mFile->setFileName(_logname);
00113         mConsole->setEnabled(mConsoleEnable);
00114         mFilter->setLoggingLevel(mLevel);
00115 
00116         mDefaultSource = new LogSource();
00117         mDefaultSource->addLogListener(mFile);
00118         mDefaultSource->addLogListener(mConsole);
00119         mDefaultSource->setLogFilter(mFilter);
00120 
00121         mDefaultSource->open();
00122 
00123         LogManager::getInstance().addLogSource(mDefaultSource);
00124     }
00125 
00126     void LogManager::setSTDOutputEnabled(bool _value)
00127     {
00128         mConsoleEnable = _value;
00129 
00130         if (mConsole != nullptr)
00131             mConsole->setEnabled(_value);
00132     }
00133 
00134     bool LogManager::getSTDOutputEnabled() const
00135     {
00136         return mConsoleEnable;
00137     }
00138 
00139     void LogManager::setLoggingLevel(LogLevel _value)
00140     {
00141         mLevel = _value;
00142 
00143         if (mFilter != nullptr)
00144             mFilter->setLoggingLevel(_value);
00145     }
00146 
00147     LogLevel LogManager::getLoggingLevel() const
00148     {
00149         return mLevel;
00150     }
00151 
00152 } // namespace MyGUI