summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Src/LogManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/Src/LogManager.cpp')
-rw-r--r--Source/Core/Common/Src/LogManager.cpp76
1 files changed, 37 insertions, 39 deletions
diff --git a/Source/Core/Common/Src/LogManager.cpp b/Source/Core/Common/Src/LogManager.cpp
index 7e2275c4b1..d95e76ac5b 100644
--- a/Source/Core/Common/Src/LogManager.cpp
+++ b/Source/Core/Common/Src/LogManager.cpp
@@ -86,17 +86,20 @@ LogManager::LogManager()
m_fileLog = new FileLogListener(File::GetUserPath(F_MAINLOG_IDX).c_str());
m_consoleLog = new ConsoleListener();
- for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
- m_Log[i]->setEnable(true);
- m_Log[i]->addListener(m_fileLog);
- m_Log[i]->addListener(m_consoleLog);
+ for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
+ {
+ m_Log[i]->SetEnable(true);
+ m_Log[i]->AddListener(m_fileLog);
+ m_Log[i]->AddListener(m_consoleLog);
}
}
-LogManager::~LogManager() {
- for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
- m_logManager->removeListener((LogTypes::LOG_TYPE)i, m_fileLog);
- m_logManager->removeListener((LogTypes::LOG_TYPE)i, m_consoleLog);
+LogManager::~LogManager()
+{
+ for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
+ {
+ m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_fileLog);
+ m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_consoleLog);
}
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
@@ -107,32 +110,24 @@ LogManager::~LogManager() {
}
void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
- const char *file, int line, const char *format,
- va_list args) {
-
+ const char *file, int line, const char *format, va_list args)
+{
char temp[MAX_MSGLEN];
char msg[MAX_MSGLEN * 2];
LogContainer *log = m_Log[type];
- if (! log->isEnable() || level > log->getLevel() || ! log->hasListeners())
+ if (!log->IsEnabled() || level > log->GetLevel() || ! log->HasListeners())
return;
CharArrayFromFormatV(temp, MAX_MSGLEN, format, args);
static const char level_to_char[7] = "-NEWID";
sprintf(msg, "%s %s:%u %c[%s]: %s\n",
- Common::Timer::GetTimeFormatted().c_str(),
- file, line, level_to_char[(int)level],
- log->getShortName(), temp);
+ Common::Timer::GetTimeFormatted().c_str(),
+ file, line, level_to_char[(int)level],
+ log->GetShortName(), temp);
- std::lock_guard<std::mutex> lk(logMutex);
- log->trigger(level, msg);
-}
-
-void LogManager::removeListener(LogTypes::LOG_TYPE type, LogListener *listener)
-{
- std::lock_guard<std::mutex> lk(logMutex);
- m_Log[type]->removeListener(listener);
+ log->Trigger(level, msg);
}
void LogManager::Init()
@@ -147,31 +142,33 @@ void LogManager::Shutdown()
}
LogContainer::LogContainer(const char* shortName, const char* fullName, bool enable)
- : m_enable(enable) {
+ : m_enable(enable)
+{
strncpy(m_fullName, fullName, 128);
strncpy(m_shortName, shortName, 32);
m_level = LogTypes::LWARNING;
}
// LogContainer
-void LogContainer::addListener(LogListener *listener) {
- if (!isListener(listener))
- listeners.push_back(listener);
+void LogContainer::AddListener(LogListener *listener)
+{
+ std::lock_guard<std::mutex> lk(m_listeners_lock);
+ m_listeners.insert(listener);
}
-void LogContainer::removeListener(LogListener *listener) {
- std::vector<LogListener *>::iterator i = std::find(listeners.begin(), listeners.end(), listener);
- if (listeners.end() != i)
- listeners.erase(i);
+void LogContainer::RemoveListener(LogListener *listener)
+{
+ std::lock_guard<std::mutex> lk(m_listeners_lock);
+ m_listeners.erase(listener);
}
-bool LogContainer::isListener(LogListener *listener) const {
- return listeners.end() != std::find(listeners.begin(), listeners.end(), listener);
-}
+void LogContainer::Trigger(LogTypes::LOG_LEVELS level, const char *msg)
+{
+ std::lock_guard<std::mutex> lk(m_listeners_lock);
-void LogContainer::trigger(LogTypes::LOG_LEVELS level, const char *msg) {
- std::vector<LogListener *>::const_iterator i;
- for (i = listeners.begin(); i != listeners.end(); ++i) {
+ std::set<LogListener*>::const_iterator i;
+ for (i = m_listeners.begin(); i != m_listeners.end(); ++i)
+ {
(*i)->Log(level, msg);
}
}
@@ -179,13 +176,14 @@ void LogContainer::trigger(LogTypes::LOG_LEVELS level, const char *msg) {
FileLogListener::FileLogListener(const char *filename)
{
m_logfile.open(filename, std::ios::app);
- setEnable(true);
+ SetEnable(true);
}
void FileLogListener::Log(LogTypes::LOG_LEVELS, const char *msg)
{
- if (!m_enable || !isValid())
+ if (!IsEnabled() || !IsValid())
return;
+ std::lock_guard<std::mutex> lk(m_log_lock);
m_logfile << msg << std::flush;
}