diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-08-16 00:12:18 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-08-16 00:12:18 +0200 |
commit | d5cf594bfe91ff22175c6e344b23b95cdbcc8a3c (patch) | |
tree | 16214b7561290674fec8b870249423c8de431f48 /src/server/shared/Logging/Appender.h | |
parent | 21e0880fbaf78abd530e0fbb941f19adf556891a (diff) |
Core/Logging: Refactored appender creation to allow using logging without mysql dependency in tools (future task)
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 |