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