diff options
Diffstat (limited to 'src/server/shared/Logging/Appender.h')
-rw-r--r-- | src/server/shared/Logging/Appender.h | 22 |
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 |