diff --git a/CHANGELOG.md b/CHANGELOG.md index 369e4ec5b..78d7638e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Removed the 10-item limit per envelope for non-session data. Sessions are now limited to 100 per envelope, while other items (e.g., attachments) have no limit in amount. ([#1347](https://github.com/getsentry/sentry-native/pull/1347)) - Align the `breakpad` interface changes introduced with [#1083](https://github.com/getsentry/sentry-native/pull/1083) with the corresponding iOS build. ([#1465](https://github.com/getsentry/sentry-native/pull/1465)) +- Add structured logs to debug output when `debug` option is set. ([#1466](https://github.com/getsentry/sentry-native/pull/1466)) ## 0.12.2 diff --git a/src/sentry_logger.h b/src/sentry_logger.h index 87191da72..b6c8febed 100644 --- a/src/sentry_logger.h +++ b/src/sentry_logger.h @@ -46,4 +46,9 @@ void sentry__logger_disable(void); #define SENTRY_ERROR(message) sentry__logger_log(SENTRY_LEVEL_ERROR, message) +#define SENTRY_FATALF(message, ...) \ + sentry__logger_log(SENTRY_LEVEL_FATAL, message, __VA_ARGS__) + +#define SENTRY_FATAL(message) sentry__logger_log(SENTRY_LEVEL_FATAL, message) + #endif diff --git a/src/sentry_logs.c b/src/sentry_logs.c index 50dfec020..55ea9b41d 100644 --- a/src/sentry_logs.c +++ b/src/sentry_logs.c @@ -752,6 +752,33 @@ construct_log(sentry_level_t level, const char *message, va_list args) return log; } +static void +debug_print_log(sentry_level_t level, const char *log_body) +{ + // TODO if we enable our debug-macro as logging integration + // we need to avoid recursion here + switch (level) { + case SENTRY_LEVEL_TRACE: + SENTRY_TRACEF("LOG: %s", log_body); + break; + case SENTRY_LEVEL_DEBUG: + SENTRY_DEBUGF("LOG: %s", log_body); + break; + case SENTRY_LEVEL_INFO: + SENTRY_INFOF("LOG: %s", log_body); + break; + case SENTRY_LEVEL_WARNING: + SENTRY_WARNF("LOG: %s", log_body); + break; + case SENTRY_LEVEL_ERROR: + SENTRY_ERRORF("LOG: %s", log_body); + break; + case SENTRY_LEVEL_FATAL: + SENTRY_FATALF("LOG: %s", log_body); + break; + } +} + log_return_value_t sentry__logs_log(sentry_level_t level, const char *message, va_list args) { @@ -774,6 +801,11 @@ sentry__logs_log(sentry_level_t level, const char *message, va_list args) discarded = true; } } + if (options->debug && !sentry_value_is_null(log)) { + debug_print_log(level, + sentry_value_as_string( + sentry_value_get_by_key(log, "body"))); + } } if (discarded) { return SENTRY_LOG_RETURN_DISCARD;