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]

Reply via email to