diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-19 13:24:23 +0100 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2024-03-25 20:37:05 +0100 |
commit | b8bdce306a2713b59e1141a9caadc100353ca955 (patch) | |
tree | 23e681f92e2982e1bc60c8d4b2d00fd737387745 /src/common/Logging/Log.h | |
parent | 864d2eec951ab926babf56a5f8ab33a18becd15e (diff) |
Core/Logging: Fix intellisense errors - people don't like it when code glows red without a reason
(cherry picked from commit e99482ce9bb7918e23a104fe28305c60d28ed598)
Diffstat (limited to 'src/common/Logging/Log.h')
-rw-r--r-- | src/common/Logging/Log.h | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/common/Logging/Log.h b/src/common/Logging/Log.h index 74a115eac4b..dd6149f42b0 100644 --- a/src/common/Logging/Log.h +++ b/src/common/Logging/Log.h @@ -66,12 +66,19 @@ class TC_COMMON_API Log void LoadFromConfig(); void Close(); bool ShouldLog(std::string_view type, LogLevel level) const; + Logger const* GetEnabledLogger(std::string_view type, LogLevel level) const; bool SetLogLevel(std::string const& name, int32 level, bool isLogger = true); template<typename... Args> - void OutMessage(std::string_view filter, LogLevel const level, Trinity::FormatString<Args...> fmt, Args&&... args) + void OutMessage(std::string_view filter, LogLevel level, Trinity::FormatString<Args...> fmt, Args&&... args) { - OutMessageImpl(filter, level, fmt, Trinity::MakeFormatArgs(args...)); + this->OutMessageImpl(GetLoggerByType(filter), filter, level, fmt, Trinity::MakeFormatArgs(args...)); + } + + template<typename... Args> + void OutMessageTo(Logger const* logger, std::string_view filter, LogLevel level, Trinity::FormatString<Args...> fmt, Args&&... args) + { + this->OutMessageImpl(logger, filter, level, fmt, Trinity::MakeFormatArgs(args...)); } template<typename... Args> @@ -80,7 +87,7 @@ class TC_COMMON_API Log if (!ShouldLog("commands.gm", LOG_LEVEL_INFO)) return; - OutCommandImpl(account, fmt, Trinity::MakeFormatArgs(args...)); + this->OutCommandImpl(account, fmt, Trinity::MakeFormatArgs(args...)); } void OutCharDump(char const* str, uint32 account_id, uint64 guid, char const* name); @@ -90,7 +97,7 @@ class TC_COMMON_API Log template<class AppenderImpl> void RegisterAppender() { - RegisterAppender(AppenderImpl::type, &CreateAppender<AppenderImpl>); + this->RegisterAppender(AppenderImpl::type, &CreateAppender<AppenderImpl>); } std::string const& GetLogsDir() const { return m_logsDir; } @@ -111,9 +118,15 @@ class TC_COMMON_API Log return { std::begin(chars), (chars[CharArraySize - 1] == '\0' ? CharArraySize - 1 : CharArraySize) }; } + template <size_t CharArraySize> + static consteval Trinity::FormatStringView make_format_string_view(char const(&chars)[CharArraySize]) + { + return { std::begin(chars), (chars[CharArraySize - 1] == '\0' ? CharArraySize - 1 : CharArraySize) }; + } + private: static std::string GetTimestampStr(); - void write(std::unique_ptr<LogMessage> msg) const; + void write(Logger const* logger, std::unique_ptr<LogMessage> msg) const; Logger const* GetLoggerByType(std::string_view type) const; Appender* GetAppenderByName(std::string_view name); @@ -123,8 +136,8 @@ class TC_COMMON_API Log void ReadAppendersFromConfig(); void ReadLoggersFromConfig(); void RegisterAppender(uint8 index, AppenderCreatorFn appenderCreateFn); - void OutMessageImpl(std::string_view filter, LogLevel level, Trinity::FormatStringView messageFormat, Trinity::FormatArgs messageFormatArgs); - void OutCommandImpl(uint32 account, Trinity::FormatStringView messageFormat, Trinity::FormatArgs messageFormatArgs); + void OutMessageImpl(Logger const* logger, std::string_view filter, LogLevel level, Trinity::FormatStringView messageFormat, Trinity::FormatArgs messageFormatArgs) const; + void OutCommandImpl(uint32 account, Trinity::FormatStringView messageFormat, Trinity::FormatArgs messageFormatArgs) const; std::unordered_map<uint8, AppenderCreatorFn> appenderFactory; std::unordered_map<uint8, std::unique_ptr<Appender>> appenders; @@ -141,10 +154,12 @@ class TC_COMMON_API Log #define sLog Log::instance() -#define TC_LOG_MESSAGE_BODY_CORE(filterType__, level__, message__, ...) \ - do { \ - if (Log* logInstance = sLog; logInstance->ShouldLog(Log::make_string_view(filterType__), level__)) \ - logInstance->OutMessage(Log::make_string_view(filterType__), level__, Log::make_string_view(message__), ## __VA_ARGS__); \ +#define TC_LOG_MESSAGE_BODY_CORE(filterType__, level__, message__, ...) \ + do { \ + Log* logInstance = sLog; \ + if (Logger const* loggerInstance = logInstance->GetEnabledLogger(Log::make_string_view((filterType__)), (level__))) \ + logInstance->OutMessageTo(loggerInstance, Log::make_string_view((filterType__)), (level__), \ + Log::make_format_string_view((message__)), ## __VA_ARGS__); \ } while (0) #ifdef PERFORMANCE_PROFILING |