MyGUI  3.2.0
MyGUI_LogManager.cpp
Go to the documentation of this file.
1 
6 /*
7  This file is part of MyGUI.
8 
9  MyGUI is free software: you can redistribute it and/or modify
10  it under the terms of the GNU Lesser General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  (at your option) any later version.
13 
14  MyGUI is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public License
20  along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
21 */
22 #include "MyGUI_Precompiled.h"
23 #include "MyGUI_LogManager.h"
24 #include "MyGUI_FileLogListener.h"
26 #include "MyGUI_LevelLogFilter.h"
27 #include "MyGUI_LogSource.h"
28 #include <time.h>
29 
30 namespace MyGUI
31 {
32 
33  LogManager* LogManager::msInstance = nullptr;
34 
36  mConsole(nullptr),
37  mFile(nullptr),
38  mFilter(nullptr),
39  mDefaultSource(nullptr),
40  mLevel(LogLevel::Info),
41  mConsoleEnable(true)
42  {
43  msInstance = this;
44  }
45 
47  {
48  flush();
49  close();
50 
51  delete mDefaultSource;
52  mDefaultSource = nullptr;
53  delete mConsole;
54  mConsole = nullptr;
55  delete mFile;
56  mFile = nullptr;
57  delete mFilter;
58  mFilter = nullptr;
59 
60  msInstance = nullptr;
61  }
62 
64  {
65  if (msInstance == nullptr)
66  {
68  MYGUI_BASE_EXCEPT("Singleton instance LogManager was not created", "MyGUI");
69  }
70  return *msInstance;
71  }
72 
74  {
75  return msInstance;
76  }
77 
79  {
80  for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
81  (*item)->flush();
82  }
83 
84  void LogManager::log(const std::string& _section, LogLevel _level, const std::string& _message, const char* _file, int _line)
85  {
86  time_t ctTime;
87  time(&ctTime);
88  struct tm* currentTime;
89  currentTime = localtime(&ctTime);
90 
91  for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
92  (*item)->log(_section, _level, currentTime, _message, _file, _line);
93  }
94 
95  void LogManager::close()
96  {
97  for (VectorLogSource::iterator item = mSources.begin(); item != mSources.end(); ++item)
98  (*item)->close();
99  }
100 
102  {
103  mSources.push_back(_source);
104  }
105 
106  void LogManager::createDefaultSource(const std::string& _logname)
107  {
108  mConsole = new ConsoleLogListener();
109  mFile = new FileLogListener();
110  mFilter = new LevelLogFilter();
111 
112  mFile->setFileName(_logname);
113  mConsole->setEnabled(mConsoleEnable);
114  mFilter->setLoggingLevel(mLevel);
115 
116  mDefaultSource = new LogSource();
117  mDefaultSource->addLogListener(mFile);
118  mDefaultSource->addLogListener(mConsole);
119  mDefaultSource->setLogFilter(mFilter);
120 
121  mDefaultSource->open();
122 
123  LogManager::getInstance().addLogSource(mDefaultSource);
124  }
125 
127  {
128  mConsoleEnable = _value;
129 
130  if (mConsole != nullptr)
131  mConsole->setEnabled(_value);
132  }
133 
135  {
136  return mConsoleEnable;
137  }
138 
140  {
141  mLevel = _value;
142 
143  if (mFilter != nullptr)
144  mFilter->setLoggingLevel(_value);
145  }
146 
148  {
149  return mLevel;
150  }
151 
152 } // namespace MyGUI