MyGUI
3.2.0
|
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