aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Appender.h
diff options
context:
space:
mode:
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