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