clean up json_value & server_log (#7142)

This commit is contained in:
Xuan Son Nguyen 2024-05-08 13:24:14 +02:00 committed by GitHub
parent 4cd621c26d
commit 1fd9c1741d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -49,18 +49,18 @@ extern bool server_log_json;
#define LOG_WARNING(MSG, ...) server_log("WARN", __func__, __LINE__, MSG, __VA_ARGS__) #define LOG_WARNING(MSG, ...) server_log("WARN", __func__, __LINE__, MSG, __VA_ARGS__)
#define LOG_INFO( MSG, ...) server_log("INFO", __func__, __LINE__, MSG, __VA_ARGS__) #define LOG_INFO( MSG, ...) server_log("INFO", __func__, __LINE__, MSG, __VA_ARGS__)
static inline void server_log(const char *level, const char *function, int line, const char *message, const nlohmann::ordered_json &extra); static inline void server_log(const char * level, const char * function, int line, const char * message, const json & extra);
template <typename T> template <typename T>
static T json_value(const json &body, const std::string &key, const T &default_value) { static T json_value(const json & body, const std::string & key, const T & default_value) {
// Fallback null to default value // Fallback null to default value
if (body.contains(key) && !body.at(key).is_null()){ if (body.contains(key) && !body.at(key).is_null()) {
try { try {
return body.value(key, default_value); return body.at(key);
} } catch (NLOHMANN_JSON_NAMESPACE::detail::type_error const &) {
catch (nlohmann::json_abi_v3_11_3::detail::type_error const&){ std::stringstream ss;
std::string message = "Wrong type supplied for parameter '" + key + "'. Expected '" + typeid(default_value).name() + "', using default value."; ss << "Wrong type supplied for parameter '" << key << "'. Expected '" << json(default_value).type_name() << "', using default value.";
server_log("WARN", __func__, __LINE__, message.c_str(), body); LOG_WARNING(ss.str().c_str(), body);
return default_value; return default_value;
} }
} else { } else {
@ -68,16 +68,16 @@ static T json_value(const json &body, const std::string &key, const T &default_v
} }
} }
static inline void server_log(const char *level, const char *function, int line, const char *message, const nlohmann::ordered_json &extra) { static inline void server_log(const char * level, const char * function, int line, const char * message, const json & extra) {
std::stringstream ss_tid; std::stringstream ss_tid;
ss_tid << std::this_thread::get_id(); ss_tid << std::this_thread::get_id();
json log = nlohmann::ordered_json{ json log = json{
{"tid", ss_tid.str()}, {"tid", ss_tid.str()},
{"timestamp", time(nullptr)}, {"timestamp", time(nullptr)},
}; };
if (server_log_json) { if (server_log_json) {
log.merge_patch( { log.merge_patch({
{"level", level}, {"level", level},
{"function", function}, {"function", function},
{"line", line}, {"line", line},
@ -98,7 +98,7 @@ static inline void server_log(const char *level, const char *function, int line,
} }
std::stringstream ss; std::stringstream ss;
ss << buf << " |"; ss << buf << " |";
for (const auto& el : log.items()) for (const auto & el : log.items())
{ {
const std::string value = el.value().dump(-1, ' ', false, json::error_handler_t::replace); const std::string value = el.value().dump(-1, ' ', false, json::error_handler_t::replace);
ss << " " << el.key() << "=" << value; ss << " " << el.key() << "=" << value;