aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Appender.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-08-16 00:12:18 +0200
committerDDuarte <dnpd.dd@gmail.com>2015-08-16 00:09:02 +0100
commitcdbd563157f18423111ddb95ff4132f315d274dc (patch)
tree0c672419147468baa1e0cde58e2d6d5ce32f03fe /src/server/shared/Logging/Appender.h
parentc1e3fdc826dcd7071a48aca2708012058af52f31 (diff)
Core/Logging: Refactored appender creation to allow using logging without mysql dependency in tools (future task)
Conflicts: src/server/bnetserver/Main.cpp src/server/worldserver/Main.cpp
Diffstat (limited to 'src/server/shared/Logging/Appender.h')
-rw-r--r--src/server/shared/Logging/Appender.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h
index 73af351e41d..09ee6070050 100644
--- a/src/server/shared/Logging/Appender.h
+++ b/src/server/shared/Logging/Appender.h
@@ -22,6 +22,7 @@
#include <string>
#include <time.h>
#include <type_traits>
+#include <utility>
#include "Define.h"
// Values assigned have their equivalent in enum ACE_Log_Priority
@@ -85,18 +86,19 @@ struct LogMessage
class Appender
{
public:
- Appender(uint8 _id, std::string const& name, AppenderType type = APPENDER_NONE, LogLevel level = LOG_LEVEL_DISABLED, AppenderFlags flags = APPENDER_FLAGS_NONE);
+ Appender(uint8 _id, std::string const& name, LogLevel level = LOG_LEVEL_DISABLED, AppenderFlags flags = APPENDER_FLAGS_NONE);
virtual ~Appender();
uint8 getId() const;
std::string const& getName() const;
- AppenderType getType() const;
+ virtual AppenderType getType() const = 0;
LogLevel getLogLevel() const;
AppenderFlags getFlags() const;
void setLogLevel(LogLevel);
void write(LogMessage* message);
static const char* getLogLevelString(LogLevel level);
+ virtual void setRealmId(uint32 /*realmId*/) { }
private:
virtual void _write(LogMessage const* /*message*/) = 0;
@@ -110,4 +112,20 @@ class Appender
typedef std::unordered_map<uint8, Appender*> AppenderMap;
+typedef std::vector<char const*> ExtraAppenderArgs;
+typedef Appender*(*AppenderCreatorFn)(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags, ExtraAppenderArgs extraArgs);
+typedef std::unordered_map<uint8, AppenderCreatorFn> AppenderCreatorMap;
+
+template<class AppenderImpl>
+Appender* CreateAppender(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags, ExtraAppenderArgs extraArgs)
+{
+ return new AppenderImpl(id, name, level, flags, std::forward<ExtraAppenderArgs>(extraArgs));
+}
+
+class InvalidAppenderArgsException : public std::length_error
+{
+public:
+ using std::length_error::length_error;
+};
+
#endif