aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Appender.cpp
diff options
context:
space:
mode:
authorNaios <naios-dev@live.de>2015-03-11 10:06:24 +0100
committerNaios <naios-dev@live.de>2015-03-13 09:15:42 +0100
commit95ebe4f31cba6b4772cfd19f99da45039719807b (patch)
tree1cddae4f22eaf9ee6651dea46cdb42d9d39f6283 /src/server/shared/Logging/Appender.cpp
parenta860c62fed3a1670488cb256788c5efe4467c19a (diff)
Core/Log: Add type safe formatting
* improves safety and log speed through: - variadic templates - perfect forwarding * fixes a newline in db logs * improve performance of Appender::write by using std::ostringstream && std::move
Diffstat (limited to 'src/server/shared/Logging/Appender.cpp')
-rw-r--r--src/server/shared/Logging/Appender.cpp34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/server/shared/Logging/Appender.cpp b/src/server/shared/Logging/Appender.cpp
index dff931e3da8..ca40a857419 100644
--- a/src/server/shared/Logging/Appender.cpp
+++ b/src/server/shared/Logging/Appender.cpp
@@ -18,6 +18,10 @@
#include "Appender.h"
#include "Common.h"
#include "Util.h"
+#include "StringFormat.h"
+
+#include <utility>
+#include <sstream>
std::string LogMessage::getTimeStr(time_t time)
{
@@ -68,38 +72,36 @@ void Appender::setLogLevel(LogLevel _level)
level = _level;
}
-void Appender::write(LogMessage& message)
+void Appender::write(LogMessage* message)
{
- if (!level || level > message.level)
+ if (!level || level > message->level)
return;
- message.prefix.clear();
+ std::ostringstream ss;
+
if (flags & APPENDER_FLAGS_PREFIX_TIMESTAMP)
- message.prefix.append(message.getTimeStr());
+ ss << message->getTimeStr();
if (flags & APPENDER_FLAGS_PREFIX_LOGLEVEL)
{
- if (!message.prefix.empty())
- message.prefix.push_back(' ');
+ if (ss.rdbuf()->in_avail() == 0)
+ ss << ' ';
- char text[MAX_QUERY_LEN];
- snprintf(text, MAX_QUERY_LEN, "%-5s", Appender::getLogLevelString(message.level));
- message.prefix.append(text);
+ ss << Trinity::StringFormat("%-5s", Appender::getLogLevelString(message->level));
}
if (flags & APPENDER_FLAGS_PREFIX_LOGFILTERTYPE)
{
- if (!message.prefix.empty())
- message.prefix.push_back(' ');
+ if (ss.rdbuf()->in_avail() == 0)
+ ss << ' ';
- message.prefix.push_back('[');
- message.prefix.append(message.type);
- message.prefix.push_back(']');
+ ss << '[' << message->type << ']';
}
- if (!message.prefix.empty())
- message.prefix.push_back(' ');
+ if (ss.rdbuf()->in_avail() == 0)
+ ss << ' ';
+ message->prefix = std::move(ss.str());
_write(message);
}