diff options
| author | Glenn Smith <glenn@vector35.com> | 2025-04-15 18:29:33 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2025-04-16 16:20:43 -0400 |
| commit | 6048009821540158204514940210999152088083 (patch) | |
| tree | b6b463e75511ed880359786b724bf06c8d1b7c89 | |
| parent | b2ec34ae9b5b78efa735804c103c112aa77a0823 (diff) | |
Fix Logger indentation api
| -rw-r--r-- | binaryninjaapi.h | 32 | ||||
| -rw-r--r-- | binaryninjacore.h | 1 | ||||
| -rw-r--r-- | log.cpp | 27 |
3 files changed, 53 insertions, 7 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 2fe2ed09..9e7e9eff 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1057,9 +1057,23 @@ namespace BinaryNinja { */ size_t GetSessionId(); + /*! Indent the logger's indentation level by one + */ void Indent(); + + /*! Decrease the logger's indentation level by one + */ void Dedent(); + + /*! Set the logger's indentation level to zero + */ void ResetIndent(); + + /*! Get the string to prepend to log messages to indent them + + \return Indentation string + */ + std::string GetIndent() const; }; /*! A class allowing registering and retrieving Loggers @@ -1120,6 +1134,24 @@ namespace BinaryNinja { static std::vector<std::string> GetLoggerNames(); }; + /*! RAII helper that indents/dedents a Logger inside a scope + \ingroup logging + */ + class LoggerIndentScope + { + Ref<Logger> m_logger; + + public: + LoggerIndentScope(Ref<Logger> logger): m_logger(logger) + { + m_logger->Indent(); + } + ~LoggerIndentScope() + { + m_logger->Dedent(); + } + }; + /*! @addtogroup coreapi @{ diff --git a/binaryninjacore.h b/binaryninjacore.h index aa938810..58b0bd1c 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -3743,6 +3743,7 @@ extern "C" BINARYNINJACOREAPI void BNLoggerIndent(BNLogger* logger); BINARYNINJACOREAPI void BNLoggerDedent(BNLogger* logger); BINARYNINJACOREAPI void BNLoggerResetIndent(BNLogger* logger); + BINARYNINJACOREAPI char* BNGetLoggerIndent(BNLogger* logger); BINARYNINJACOREAPI BNLogger* BNLogCreateLogger(const char* loggerName, size_t sessionId); BINARYNINJACOREAPI BNLogger* BNLogGetLogger(const char* loggerName, size_t sessionId); BINARYNINJACOREAPI char** BNLogGetLoggerNames(size_t* count); @@ -255,7 +255,7 @@ void Logger::Log(BNLogLevel level, const char* fmt, ...) { va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), level, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), level, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); } @@ -265,7 +265,7 @@ void Logger::LogTrace(const char* fmt, ...) #ifdef _DEBUG va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), DebugLog, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), DebugLog, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); #endif } @@ -275,7 +275,7 @@ void Logger::LogDebug(const char* fmt, ...) { va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), DebugLog, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), DebugLog, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); } @@ -284,7 +284,7 @@ void Logger::LogInfo(const char* fmt, ...) { va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), InfoLog, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), InfoLog, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); } @@ -293,7 +293,7 @@ void Logger::LogWarn(const char* fmt, ...) { va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), WarningLog, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), WarningLog, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); } @@ -302,7 +302,7 @@ void Logger::LogError(const char* fmt, ...) { va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), ErrorLog, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), ErrorLog, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); } @@ -311,7 +311,7 @@ void Logger::LogAlert(const char* fmt, ...) { va_list args; va_start(args, fmt); - PerformLog(GetSessionId(), AlertLog, GetName(), GetThreadId(), fmt, args); + PerformLog(GetSessionId(), AlertLog, GetName(), GetThreadId(), fmt::format("{}{}", GetIndent(), fmt).c_str(), args); va_end(args); } @@ -398,6 +398,19 @@ void Logger::ResetIndent() } +string Logger::GetIndent() const +{ + char* indent = BNGetLoggerIndent(m_object); + if (!indent) + { + return ""; + } + string result = indent; + BNFreeString(indent); + return result; +} + + Ref<Logger> LogRegistry::CreateLogger(const std::string& loggerName, size_t sessionId) { return new Logger(BNLogCreateLogger(loggerName.c_str(), sessionId)); |
