From 694b81e12921d66fd4d63ef55cf3bda52c272f87 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Thu, 28 Jan 2021 20:52:18 +0800 Subject: [PATCH] C++ swaglog (#19825) * c++ swaglog * dd * continue old-commit-hash: c283be24d38d688eb9a0009d79d33262ee542822 --- selfdrive/common/swaglog.cc | 43 ++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/selfdrive/common/swaglog.cc b/selfdrive/common/swaglog.cc index d1f15fda74..fcd207d21c 100644 --- a/selfdrive/common/swaglog.cc +++ b/selfdrive/common/swaglog.cc @@ -11,20 +11,27 @@ #include "json11.hpp" -#include "common/timing.h" #include "common/util.h" #include "common/version.h" #include "swaglog.h" -typedef struct LogState { +class LogState { +public: + LogState() = default; + ~LogState(); std::mutex lock; bool inited; json11::Json::object ctx_j; void *zctx; void *sock; int print_level; -} LogState; +}; + +LogState::~LogState() { + zmq_close(sock); + zmq_ctx_destroy(zctx); +} static LogState s = {}; @@ -71,24 +78,26 @@ static void cloudlog_init() { s.inited = true; } -void cloudlog_e(int levelnum, const char* filename, int lineno, const char* func, - const char* fmt, ...) { +void log(int levelnum, const char* filename, int lineno, const char* func, const char* msg, const std::string& log_s) { std::lock_guard lk(s.lock); cloudlog_init(); + if (levelnum >= s.print_level) { + printf("%s: %s\n", filename, msg); + } + char levelnum_c = levelnum; + zmq_send(s.sock, &levelnum_c, 1, ZMQ_NOBLOCK | ZMQ_SNDMORE); + zmq_send(s.sock, log_s.c_str(), log_s.length(), ZMQ_NOBLOCK); +} - char* msg_buf = NULL; +void cloudlog_e(int levelnum, const char* filename, int lineno, const char* func, + const char* fmt, ...) { + char* msg_buf = nullptr; va_list args; va_start(args, fmt); vasprintf(&msg_buf, fmt, args); va_end(args); - if (!msg_buf) { - return; - } - - if (levelnum >= s.print_level) { - printf("%s: %s\n", filename, msg_buf); - } + if (!msg_buf) return; json11::Json log_j = json11::Json::object { {"msg", msg_buf}, @@ -99,15 +108,9 @@ void cloudlog_e(int levelnum, const char* filename, int lineno, const char* func {"funcname", func}, {"created", seconds_since_epoch()} }; - std::string log_s = log_j.dump(); - + log(levelnum, filename, lineno, func, msg_buf, log_s); free(msg_buf); - - char levelnum_c = levelnum; - zmq_send(s.sock, &levelnum_c, 1, ZMQ_NOBLOCK | ZMQ_SNDMORE); - zmq_send(s.sock, log_s.c_str(), log_s.length(), ZMQ_NOBLOCK); - } void cloudlog_bind(const char* k, const char* v) {