aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Log.cpp
diff options
context:
space:
mode:
authorStormBytePP <stormbyte@gmail.com>2015-08-15 02:19:10 +0200
committerStormBytePP <stormbyte@gmail.com>2015-08-16 21:23:15 +0200
commit1f66d719f2cbbcb144b5080c89dd73fcae261798 (patch)
tree6a3778749b629c92de95cef7eb3d1d8c2630bdc4 /src/server/shared/Logging/Log.cpp
parent222eaccc51b8d358c7b60d8def40d6461244ed31 (diff)
Core/BuildSystem: Merge collision, debugging, threading, utilities and configuration into "common" which does not depend on shared anymore and moved database out of shared library
These changes enables to build tools only without even having MySQL installed
Diffstat (limited to 'src/server/shared/Logging/Log.cpp')
-rw-r--r--src/server/shared/Logging/Log.cpp348
1 files changed, 0 insertions, 348 deletions
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
deleted file mode 100644
index 5075815ad54..00000000000
--- a/src/server/shared/Logging/Log.cpp
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "Log.h"
-#include "Common.h"
-#include "Config.h"
-#include "Util.h"
-#include "AppenderConsole.h"
-#include "AppenderFile.h"
-#include "AppenderDB.h"
-#include "LogOperation.h"
-
-#include <cstdio>
-#include <sstream>
-
-Log::Log() : _ioService(nullptr), _strand(nullptr)
-{
- m_logsTimestamp = "_" + GetTimestampStr();
- RegisterAppender<AppenderConsole>();
- RegisterAppender<AppenderFile>();
-}
-
-Log::~Log()
-{
- delete _strand;
- Close();
-}
-
-uint8 Log::NextAppenderId()
-{
- return AppenderId++;
-}
-
-int32 GetConfigIntDefault(std::string base, const char* name, int32 value)
-{
- base.append(name);
- return sConfigMgr->GetIntDefault(base.c_str(), value);
-}
-
-std::string GetConfigStringDefault(std::string base, const char* name, const char* value)
-{
- base.append(name);
- return sConfigMgr->GetStringDefault(base.c_str(), value);
-}
-
-Appender* Log::GetAppenderByName(std::string const& name)
-{
- AppenderMap::iterator it = appenders.begin();
- while (it != appenders.end() && it->second && it->second->getName() != name)
- ++it;
-
- return it == appenders.end() ? NULL : it->second;
-}
-
-void Log::CreateAppenderFromConfig(std::string const& appenderName)
-{
- if (appenderName.empty())
- return;
-
- // Format=type, level, flags, optional1, optional2
- // if type = File. optional1 = file and option2 = mode
- // if type = Console. optional1 = Color
- std::string options = sConfigMgr->GetStringDefault(appenderName.c_str(), "");
-
- Tokenizer tokens(options, ',');
- Tokenizer::const_iterator iter = tokens.begin();
-
- size_t size = tokens.size();
- std::string name = appenderName.substr(9);
-
- if (size < 2)
- {
- fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong configuration for appender %s. Config line: %s\n", name.c_str(), options.c_str());
- return;
- }
-
- AppenderFlags flags = APPENDER_FLAGS_NONE;
- AppenderType type = AppenderType(atoi(*iter++));
- LogLevel level = LogLevel(atoi(*iter++));
-
- if (level > LOG_LEVEL_FATAL)
- {
- fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name.c_str());
- return;
- }
-
- if (size > 2)
- flags = AppenderFlags(atoi(*iter++));
-
- auto factoryFunction = appenderFactory.find(type);
- if (factoryFunction == appenderFactory.end())
- {
- fprintf(stderr, "Log::CreateAppenderFromConfig: Unknown type %d for appender %s\n", type, name.c_str());
- return;
- }
-
- try
- {
- Appender* appender = factoryFunction->second(NextAppenderId(), name, level, flags, ExtraAppenderArgs(iter, tokens.end()));
- appenders[appender->getId()] = appender;
- }
- catch (InvalidAppenderArgsException const& iaae)
- {
- fprintf(stderr, "%s", iaae.what());
- }
-}
-
-void Log::CreateLoggerFromConfig(std::string const& appenderName)
-{
- if (appenderName.empty())
- return;
-
- LogLevel level = LOG_LEVEL_DISABLED;
- uint8 type = uint8(-1);
-
- std::string options = sConfigMgr->GetStringDefault(appenderName.c_str(), "");
- std::string name = appenderName.substr(7);
-
- if (options.empty())
- {
- fprintf(stderr, "Log::CreateLoggerFromConfig: Missing config option Logger.%s\n", name.c_str());
- return;
- }
-
- Tokenizer tokens(options, ',');
- Tokenizer::const_iterator iter = tokens.begin();
-
- if (tokens.size() != 2)
- {
- fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong config option Logger.%s=%s\n", name.c_str(), options.c_str());
- return;
- }
-
- Logger& logger = loggers[name];
- if (!logger.getName().empty())
- {
- fprintf(stderr, "Error while configuring Logger %s. Already defined\n", name.c_str());
- return;
- }
-
- level = LogLevel(atoi(*iter++));
- if (level > LOG_LEVEL_FATAL)
- {
- fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong Log Level %u for logger %s\n", type, name.c_str());
- return;
- }
-
- if (level < lowestLogLevel)
- lowestLogLevel = level;
-
- logger.Create(name, level);
- //fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Level %u\n", name.c_str(), level);
-
- std::istringstream ss(*iter);
- std::string str;
-
- ss >> str;
- while (ss)
- {
- if (Appender* appender = GetAppenderByName(str))
- {
- logger.addAppender(appender->getId(), appender);
- //fprintf(stdout, "Log::CreateLoggerFromConfig: Added Appender %s to Logger %s\n", appender->getName().c_str(), name.c_str());
- }
- else
- fprintf(stderr, "Error while configuring Appender %s in Logger %s. Appender does not exist", str.c_str(), name.c_str());
- ss >> str;
- }
-}
-
-void Log::ReadAppendersFromConfig()
-{
- std::list<std::string> keys = sConfigMgr->GetKeysByString("Appender.");
-
- while (!keys.empty())
- {
- CreateAppenderFromConfig(keys.front());
- keys.pop_front();
- }
-}
-
-void Log::ReadLoggersFromConfig()
-{
- std::list<std::string> keys = sConfigMgr->GetKeysByString("Logger.");
-
- while (!keys.empty())
- {
- CreateLoggerFromConfig(keys.front());
- keys.pop_front();
- }
-
- // Bad config configuration, creating default config
- if (loggers.find(LOGGER_ROOT) == loggers.end())
- {
- fprintf(stderr, "Wrong Loggers configuration. Review your Logger config section.\n"
- "Creating default loggers [root (Error), server (Info)] to console\n");
-
- Close(); // Clean any Logger or Appender created
-
- AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE, ExtraAppenderArgs());
- appenders[appender->getId()] = appender;
-
- Logger& logger = loggers[LOGGER_ROOT];
- logger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR);
- logger.addAppender(appender->getId(), appender);
-
- logger = loggers["server"];
- logger.Create("server", LOG_LEVEL_ERROR);
- logger.addAppender(appender->getId(), appender);
- }
-}
-
-void Log::write(std::unique_ptr<LogMessage>&& msg) const
-{
- Logger const* logger = GetLoggerByType(msg->type);
-
- if (_ioService)
- {
- auto logOperation = std::shared_ptr<LogOperation>(new LogOperation(logger, std::move(msg)));
-
- _ioService->post(_strand->wrap([logOperation](){ logOperation->call(); }));
- }
- else
- logger->write(msg.get());
-}
-
-std::string Log::GetTimestampStr()
-{
- time_t tt = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
-
- std::tm aTm;
- localtime_r(&tt, &aTm);
-
- // YYYY year
- // MM month (2 digits 01-12)
- // DD day (2 digits 01-31)
- // HH hour (2 digits 00-23)
- // MM minutes (2 digits 00-59)
- // SS seconds (2 digits 00-59)
- return Trinity::StringFormat("%04d-%02d-%02d_%02d-%02d-%02d",
- aTm.tm_year + 1900, aTm.tm_mon + 1, aTm.tm_mday, aTm.tm_hour, aTm.tm_min, aTm.tm_sec);
-}
-
-bool Log::SetLogLevel(std::string const& name, const char* newLevelc, bool isLogger /* = true */)
-{
- LogLevel newLevel = LogLevel(atoi(newLevelc));
- if (newLevel < 0)
- return false;
-
- if (isLogger)
- {
- LoggerMap::iterator it = loggers.begin();
- while (it != loggers.end() && it->second.getName() != name)
- ++it;
-
- if (it == loggers.end())
- return false;
-
- it->second.setLogLevel(newLevel);
-
- if (newLevel != LOG_LEVEL_DISABLED && newLevel < lowestLogLevel)
- lowestLogLevel = newLevel;
- }
- else
- {
- Appender* appender = GetAppenderByName(name);
- if (!appender)
- return false;
-
- appender->setLogLevel(newLevel);
- }
-
- return true;
-}
-
-void Log::outCharDump(char const* str, uint32 accountId, uint64 guid, char const* name)
-{
- if (!str || !ShouldLog("entities.player.dump", LOG_LEVEL_INFO))
- return;
-
- std::ostringstream ss;
- ss << "== START DUMP == (account: " << accountId << " guid: " << guid << " name: " << name
- << ")\n" << str << "\n== END DUMP ==\n";
-
- std::unique_ptr<LogMessage> msg(new LogMessage(LOG_LEVEL_INFO, "entities.player.dump", ss.str()));
- std::ostringstream param;
- param << guid << '_' << name;
-
- msg->param1 = param.str();
-
- write(std::move(msg));
-}
-
-void Log::SetRealmId(uint32 id)
-{
- for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
- it->second->setRealmId(id);
-}
-
-void Log::Close()
-{
- loggers.clear();
- for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
- delete it->second;
-
- appenders.clear();
-}
-
-void Log::Initialize(boost::asio::io_service* ioService)
-{
- if (ioService)
- {
- _ioService = ioService;
- _strand = new boost::asio::strand(*ioService);
- }
-
- LoadFromConfig();
-}
-
-void Log::LoadFromConfig()
-{
- Close();
-
- lowestLogLevel = LOG_LEVEL_FATAL;
- AppenderId = 0;
- m_logsDir = sConfigMgr->GetStringDefault("LogsDir", "");
- if (!m_logsDir.empty())
- if ((m_logsDir.at(m_logsDir.length() - 1) != '/') && (m_logsDir.at(m_logsDir.length() - 1) != '\\'))
- m_logsDir.push_back('/');
-
- ReadAppendersFromConfig();
- ReadLoggersFromConfig();
-}