summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2025-04-15 18:29:33 -0400
committerGlenn Smith <glenn@vector35.com>2025-04-16 16:20:43 -0400
commit6048009821540158204514940210999152088083 (patch)
treeb6b463e75511ed880359786b724bf06c8d1b7c89
parentb2ec34ae9b5b78efa735804c103c112aa77a0823 (diff)
Fix Logger indentation api
-rw-r--r--binaryninjaapi.h32
-rw-r--r--binaryninjacore.h1
-rw-r--r--log.cpp27
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);
diff --git a/log.cpp b/log.cpp
index 1d1b2d34..ef7a3908 100644
--- a/log.cpp
+++ b/log.cpp
@@ -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));