C++ swaglog (#19825)

* c++ swaglog

* dd

* continue
albatross
Dean Lee 2021-01-28 20:52:18 +08:00 committed by GitHub
parent 79e05965c4
commit c283be24d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 20 deletions

View File

@ -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) {