This is an automated email from the ASF dual-hosted git repository. astitcher pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 39d398e5e4174c4c223574be203d00995b8af797 Author: Andrew Stitcher <[email protected]> AuthorDate: Thu Oct 14 21:06:16 2021 -0400 PROTON-2448: Logger function to dump frame trace Use the new pn_value_dump API in logger frame traces --- c/src/core/logger.c | 24 ++++++++++++++++++++++++ c/src/core/logger_private.h | 12 +++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/c/src/core/logger.c b/c/src/core/logger.c index 631627b..b697c3d 100644 --- a/c/src/core/logger.c +++ b/c/src/core/logger.c @@ -23,6 +23,7 @@ #include "logger_private.h" #include "memory.h" #include "util.h" +#include "value_dump.h" #include <assert.h> #include <stdio.h> @@ -197,6 +198,29 @@ void pni_logger_log_data(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_l } } +void pni_logger_log_raw(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, pn_buffer_t *output, size_t size) +{ + pn_string_set(logger->scratch, "\""); + pn_buffer_quote(output, logger->scratch, size); + pn_string_addf(logger->scratch, "\""); + pni_logger_log(logger, subsystem, severity, pn_string_get(logger->scratch)); +} + +void pni_logger_log_msg_frame(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, pn_bytes_t frame, const char *fmt, ...) { + va_list ap; + + va_start(ap, fmt); + pn_string_vformat(logger->scratch, fmt, ap); + va_end(ap); + size_t psize = pn_value_dump(frame, logger->scratch); + pn_bytes_t payload = {.size=frame.size-psize, .start=frame.start+psize}; + if (payload.size>0) { + pn_string_addf(logger->scratch, " (%zu) ", payload.size); + pn_quote(logger->scratch, payload.start, payload.size); + } + pni_logger_log(logger, subsystem, severity, pn_string_get(logger->scratch)); +} + void pni_logger_log(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, const char *message) { assert(logger); diff --git a/c/src/core/logger_private.h b/c/src/core/logger_private.h index 12c717d..818e4c1 100644 --- a/c/src/core/logger_private.h +++ b/c/src/core/logger_private.h @@ -19,7 +19,9 @@ * under the License. */ -#include <proton/logger.h> +#include "buffer.h" + +#include "proton/logger.h" #if __cplusplus extern "C" { @@ -42,6 +44,8 @@ void pni_logger_fini(pn_logger_t*); void pni_logger_log(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, const char *message); void pni_logger_vlogf(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, const char *fmt, va_list ap); void pni_logger_log_data(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, const char *msg, const char *bytes, size_t size); +void pni_logger_log_raw(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, pn_buffer_t *output, size_t size); +void pni_logger_log_msg_frame(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_log_level_t severity, pn_bytes_t frame, const char *fmt, ...); #define PN_SHOULD_LOG(logger, subsys, sev) \ (((sev) & PN_LEVEL_CRITICAL) || (((logger)->sub_mask & (subsys)) && ((logger)->sev_mask & (sev)))) @@ -60,6 +64,12 @@ void pni_logger_log_data(pn_logger_t *logger, pn_log_subsystem_t subsystem, pn_l pni_logger_log_data(logger, (pn_log_subsystem_t) (subsys), (pn_log_level_t) (sev), __VA_ARGS__); \ } while(0) +#define PN_LOG_RAW(logger, subsys, sev, ...) \ + do { \ + if (PN_SHOULD_LOG(logger, subsys, sev)) \ + pni_logger_log_raw(logger, (pn_log_subsystem_t) (subsys), (pn_log_level_t) (sev), __VA_ARGS__); \ + } while(0) + #if __cplusplus } #endif --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
