aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Log.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-08-16 00:12:18 +0200
committerShauren <shauren.trinity@gmail.com>2015-08-16 00:12:18 +0200
commitd5cf594bfe91ff22175c6e344b23b95cdbcc8a3c (patch)
tree16214b7561290674fec8b870249423c8de431f48 /src/server/shared/Logging/Log.cpp
parent21e0880fbaf78abd530e0fbb941f19adf556891a (diff)
Core/Logging: Refactored appender creation to allow using logging without mysql dependency in tools (future task)
Diffstat (limited to 'src/server/shared/Logging/Log.cpp')
-rw-r--r--src/server/shared/Logging/Log.cpp90
1 files changed, 30 insertions, 60 deletions
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index f9f96c3da75..286816f4c2c 100644
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -32,7 +32,8 @@
Log::Log() : _ioService(nullptr), _strand(nullptr)
{
m_logsTimestamp = "_" + GetTimestampStr();
- LoadFromConfig();
+ RegisterAppender<AppenderConsole>();
+ RegisterAppender<AppenderFile>();
}
Log::~Log()
@@ -102,60 +103,21 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
if (size > 2)
flags = AppenderFlags(atoi(*iter++));
- switch (type)
+ auto factoryFunction = appenderFactory.find(type);
+ if (factoryFunction == appenderFactory.end())
{
- case APPENDER_CONSOLE:
- {
- AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags);
- appenders[appender->getId()] = appender;
- if (size > 3)
- appender->InitColors(*iter++);
- //fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel());
- break;
- }
- case APPENDER_FILE:
- {
- std::string filename;
- std::string mode = "a";
-
- if (size < 4)
- {
- fprintf(stderr, "Log::CreateAppenderFromConfig: Missing file name for appender %s\n", name.c_str());
- return;
- }
-
- filename = *iter++;
-
- if (size > 4)
- mode = *iter++;
-
- if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
- {
- size_t dot_pos = filename.find_last_of(".");
- if (dot_pos != filename.npos)
- filename.insert(dot_pos, m_logsTimestamp);
- else
- filename += m_logsTimestamp;
- }
-
- uint64 maxFileSize = 0;
- if (size > 5)
- maxFileSize = atoi(*iter++);
-
- uint8 id = NextAppenderId();
- appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize);
- //fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type FILE, Mask %u, File %s, Mode %s\n", name.c_str(), id, level, filename.c_str(), mode.c_str());
- break;
- }
- case APPENDER_DB:
- {
- uint8 id = NextAppenderId();
- appenders[id] = new AppenderDB(id, name, level);
- break;
- }
- default:
- fprintf(stderr, "Log::CreateAppenderFromConfig: Unknown type %d for appender %s\n", type, name.c_str());
- break;
+ 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, iaae.what());
}
}
@@ -251,7 +213,7 @@ void Log::ReadLoggersFromConfig()
Close(); // Clean any Logger or Appender created
- AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE);
+ AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE, ExtraAppenderArgs());
appenders[appender->getId()] = appender;
Logger& logger = loggers[LOGGER_ROOT];
@@ -348,21 +310,29 @@ void Log::outCharDump(char const* str, uint32 accountId, uint64 guid, char const
void Log::SetRealmId(uint32 id)
{
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
- if (it->second && it->second->getType() == APPENDER_DB)
- static_cast<AppenderDB*>(it->second)->setRealmId(id);
+ it->second->setRealmId(id);
}
void Log::Close()
{
loggers.clear();
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
- {
delete it->second;
- it->second = NULL;
- }
+
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();