mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
@@ -174,8 +174,9 @@ public:
|
|||||||
|
|
||||||
class JsonLogContext
|
class JsonLogContext
|
||||||
{
|
{
|
||||||
rapidjson::Value attributes_;
|
rapidjson::Value messageParams_;
|
||||||
rapidjson::MemoryPoolAllocator<> allocator_;
|
rapidjson::MemoryPoolAllocator<> allocator_;
|
||||||
|
std::optional<std::string> journalAttributesJson_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
JsonLogContext() = default;
|
JsonLogContext() = default;
|
||||||
@@ -189,20 +190,20 @@ public:
|
|||||||
rapidjson::Value&
|
rapidjson::Value&
|
||||||
messageParams()
|
messageParams()
|
||||||
{
|
{
|
||||||
return attributes_["Params"];
|
return messageParams_;
|
||||||
}
|
}
|
||||||
|
|
||||||
rapidjson::Value&
|
std::optional<std::string>&
|
||||||
attributes()
|
journalAttributesJson()
|
||||||
{
|
{
|
||||||
return attributes_;
|
return journalAttributesJson_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
reset(
|
reset(
|
||||||
std::source_location location,
|
std::source_location location,
|
||||||
severities::Severity severity,
|
severities::Severity severity,
|
||||||
std::optional<JsonLogAttributes> const& attributes) noexcept;
|
std::optional<std::string> const& journalAttributesJson) noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -210,7 +211,9 @@ private:
|
|||||||
using Severity = severities::Severity;
|
using Severity = severities::Severity;
|
||||||
|
|
||||||
std::optional<JsonLogAttributes> m_attributes;
|
std::optional<JsonLogAttributes> m_attributes;
|
||||||
|
std::optional<std::string> m_attributesJson;
|
||||||
static std::optional<JsonLogAttributes> globalLogAttributes_;
|
static std::optional<JsonLogAttributes> globalLogAttributes_;
|
||||||
|
static std::optional<std::string> globalLogAttributesJson_;
|
||||||
static std::mutex globalLogAttributesMutex_;
|
static std::mutex globalLogAttributesMutex_;
|
||||||
static bool m_jsonLogsEnabled;
|
static bool m_jsonLogsEnabled;
|
||||||
|
|
||||||
@@ -227,6 +230,9 @@ private:
|
|||||||
static std::string
|
static std::string
|
||||||
formatLog(std::string&& message);
|
formatLog(std::string&& message);
|
||||||
|
|
||||||
|
void
|
||||||
|
rebuildAttributeJson();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -457,18 +463,8 @@ public:
|
|||||||
|
|
||||||
Journal(
|
Journal(
|
||||||
Journal const& other,
|
Journal const& other,
|
||||||
std::optional<JsonLogAttributes> attributes = std::nullopt)
|
std::optional<JsonLogAttributes> attributes = std::nullopt);
|
||||||
: m_attributes(other.m_attributes)
|
|
||||||
, m_sink(other.m_sink)
|
|
||||||
{
|
|
||||||
if (attributes.has_value())
|
|
||||||
{
|
|
||||||
if (m_attributes)
|
|
||||||
m_attributes->combine(attributes->contextValues_);
|
|
||||||
else
|
|
||||||
m_attributes = std::move(attributes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** Create a journal that writes to the specified sink. */
|
/** Create a journal that writes to the specified sink. */
|
||||||
explicit Journal(
|
explicit Journal(
|
||||||
Sink& sink,
|
Sink& sink,
|
||||||
@@ -481,6 +477,7 @@ public:
|
|||||||
m_attributes = std::move(attributes);
|
m_attributes = std::move(attributes);
|
||||||
m_attributes->setModuleName(name);
|
m_attributes->setModuleName(name);
|
||||||
}
|
}
|
||||||
|
rebuildAttributeJson();
|
||||||
}
|
}
|
||||||
|
|
||||||
Journal&
|
Journal&
|
||||||
@@ -491,6 +488,7 @@ public:
|
|||||||
|
|
||||||
m_sink = other.m_sink;
|
m_sink = other.m_sink;
|
||||||
m_attributes = other.m_attributes;
|
m_attributes = other.m_attributes;
|
||||||
|
rebuildAttributeJson();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,6 +497,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_sink = other.m_sink;
|
m_sink = other.m_sink;
|
||||||
m_attributes = std::move(other.m_attributes);
|
m_attributes = std::move(other.m_attributes);
|
||||||
|
rebuildAttributeJson();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -586,19 +585,11 @@ public:
|
|||||||
{
|
{
|
||||||
std::lock_guard lock(globalLogAttributesMutex_);
|
std::lock_guard lock(globalLogAttributesMutex_);
|
||||||
globalLogAttributes_ = std::nullopt;
|
globalLogAttributes_ = std::nullopt;
|
||||||
|
globalLogAttributesJson_ = std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
addGlobalAttributes(JsonLogAttributes globalLogAttributes)
|
addGlobalAttributes(JsonLogAttributes globalLogAttributes);
|
||||||
{
|
|
||||||
std::lock_guard lock(globalLogAttributesMutex_);
|
|
||||||
if (!globalLogAttributes_)
|
|
||||||
{
|
|
||||||
globalLogAttributes_ = JsonLogAttributes{};
|
|
||||||
}
|
|
||||||
globalLogAttributes_->combine(
|
|
||||||
globalLogAttributes.contextValues());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef __INTELLISENSE__
|
#ifndef __INTELLISENSE__
|
||||||
|
|||||||
@@ -32,6 +32,8 @@
|
|||||||
namespace beast {
|
namespace beast {
|
||||||
|
|
||||||
std::optional<Journal::JsonLogAttributes> Journal::globalLogAttributes_;
|
std::optional<Journal::JsonLogAttributes> Journal::globalLogAttributes_;
|
||||||
|
std::optional<std::string> Journal::globalLogAttributesJson_;
|
||||||
|
|
||||||
std::mutex Journal::globalLogAttributesMutex_;
|
std::mutex Journal::globalLogAttributesMutex_;
|
||||||
bool Journal::m_jsonLogsEnabled = false;
|
bool Journal::m_jsonLogsEnabled = false;
|
||||||
thread_local Journal::JsonLogContext Journal::currentJsonLogContext_{};
|
thread_local Journal::JsonLogContext Journal::currentJsonLogContext_{};
|
||||||
@@ -169,11 +171,44 @@ Journal::JsonLogAttributes::combine(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Journal::Journal(
|
||||||
|
Journal const& other,
|
||||||
|
std::optional<JsonLogAttributes> attributes)
|
||||||
|
: m_attributes(other.m_attributes), m_sink(other.m_sink)
|
||||||
|
{
|
||||||
|
if (attributes.has_value())
|
||||||
|
{
|
||||||
|
if (m_attributes)
|
||||||
|
m_attributes->combine(attributes->contextValues_);
|
||||||
|
else
|
||||||
|
m_attributes = std::move(attributes);
|
||||||
|
}
|
||||||
|
rebuildAttributeJson();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Journal::addGlobalAttributes(JsonLogAttributes globalLogAttributes)
|
||||||
|
{
|
||||||
|
std::lock_guard lock(globalLogAttributesMutex_);
|
||||||
|
if (!globalLogAttributes_)
|
||||||
|
{
|
||||||
|
globalLogAttributes_ = JsonLogAttributes{};
|
||||||
|
}
|
||||||
|
globalLogAttributes_->combine(globalLogAttributes.contextValues());
|
||||||
|
|
||||||
|
rapidjson::StringBuffer buffer;
|
||||||
|
rapidjson::Writer writer{buffer};
|
||||||
|
|
||||||
|
globalLogAttributes_->contextValues().Accept(writer);
|
||||||
|
|
||||||
|
globalLogAttributesJson_ = {buffer.GetString()};
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Journal::JsonLogContext::reset(
|
Journal::JsonLogContext::reset(
|
||||||
std::source_location location,
|
std::source_location location,
|
||||||
severities::Severity severity,
|
severities::Severity severity,
|
||||||
std::optional<JsonLogAttributes> const& attributes) noexcept
|
std::optional<std::string> const& journalAttributesJson) noexcept
|
||||||
{
|
{
|
||||||
struct ThreadIdStringInitializer
|
struct ThreadIdStringInitializer
|
||||||
{
|
{
|
||||||
@@ -187,67 +222,37 @@ Journal::JsonLogContext::reset(
|
|||||||
};
|
};
|
||||||
thread_local ThreadIdStringInitializer const threadId;
|
thread_local ThreadIdStringInitializer const threadId;
|
||||||
|
|
||||||
attributes_.SetObject();
|
journalAttributesJson_ = journalAttributesJson;
|
||||||
if (globalLogAttributes_.has_value())
|
|
||||||
{
|
|
||||||
attributes_.CopyFrom(globalLogAttributes_->contextValues(), allocator_);
|
|
||||||
if (attributes.has_value())
|
|
||||||
{
|
|
||||||
for (auto const& [key, value] :
|
|
||||||
attributes->contextValues().GetObject())
|
|
||||||
{
|
|
||||||
attributes_.RemoveMember(key);
|
|
||||||
|
|
||||||
rapidjson::Value jsonValue;
|
messageParams_.SetObject();
|
||||||
jsonValue.CopyFrom(value, allocator_);
|
|
||||||
|
|
||||||
attributes_.AddMember(
|
messageParams_.AddMember(
|
||||||
rapidjson::Value{key, allocator_},
|
|
||||||
rapidjson::Value{value, allocator_},
|
|
||||||
allocator_);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (attributes.has_value())
|
|
||||||
{
|
|
||||||
attributes_.CopyFrom(attributes->contextValues(), allocator_);
|
|
||||||
}
|
|
||||||
|
|
||||||
attributes_.RemoveMember("Function");
|
|
||||||
attributes_.AddMember(
|
|
||||||
rapidjson::StringRef("Function"),
|
rapidjson::StringRef("Function"),
|
||||||
rapidjson::Value{location.function_name(), allocator_},
|
rapidjson::Value{location.function_name(), allocator_},
|
||||||
allocator_);
|
allocator_);
|
||||||
|
|
||||||
attributes_.RemoveMember("File");
|
messageParams_.AddMember(
|
||||||
attributes_.AddMember(
|
|
||||||
rapidjson::StringRef("File"),
|
rapidjson::StringRef("File"),
|
||||||
rapidjson::Value{location.file_name(), allocator_},
|
rapidjson::Value{location.file_name(), allocator_},
|
||||||
allocator_);
|
allocator_);
|
||||||
|
|
||||||
attributes_.RemoveMember("Line");
|
messageParams_.AddMember(
|
||||||
attributes_.AddMember(
|
|
||||||
rapidjson::StringRef("Line"),
|
rapidjson::StringRef("Line"),
|
||||||
location.line(),
|
location.line(),
|
||||||
allocator_);
|
allocator_);
|
||||||
attributes_.RemoveMember("ThreadId");
|
|
||||||
attributes_.AddMember(
|
messageParams_.AddMember(
|
||||||
rapidjson::StringRef("ThreadId"),
|
rapidjson::StringRef("ThreadId"),
|
||||||
rapidjson::Value{threadId.value.c_str(), allocator_},
|
rapidjson::Value{threadId.value.c_str(), allocator_},
|
||||||
allocator_);
|
allocator_);
|
||||||
attributes_.RemoveMember("Params");
|
|
||||||
attributes_.AddMember(
|
|
||||||
rapidjson::StringRef("Params"),
|
|
||||||
rapidjson::Value{rapidjson::kObjectType},
|
|
||||||
allocator_);
|
|
||||||
auto severityStr = to_string(severity);
|
auto severityStr = to_string(severity);
|
||||||
attributes_.RemoveMember("Level");
|
messageParams_.AddMember(
|
||||||
attributes_.AddMember(
|
|
||||||
rapidjson::StringRef("Level"),
|
rapidjson::StringRef("Level"),
|
||||||
rapidjson::Value{severityStr.c_str(), allocator_},
|
rapidjson::Value{severityStr.c_str(), allocator_},
|
||||||
allocator_);
|
allocator_);
|
||||||
attributes_.RemoveMember("Time");
|
|
||||||
attributes_.AddMember(
|
messageParams_.AddMember(
|
||||||
rapidjson::StringRef("Time"),
|
rapidjson::StringRef("Time"),
|
||||||
std::chrono::duration_cast<std::chrono::milliseconds>(
|
std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
std::chrono::system_clock::now().time_since_epoch())
|
std::chrono::system_clock::now().time_since_epoch())
|
||||||
@@ -260,7 +265,7 @@ Journal::initMessageContext(
|
|||||||
std::source_location location,
|
std::source_location location,
|
||||||
severities::Severity severity) const
|
severities::Severity severity) const
|
||||||
{
|
{
|
||||||
currentJsonLogContext_.reset(location, severity, m_attributes);
|
currentJsonLogContext_.reset(location, severity, m_attributesJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
@@ -271,23 +276,59 @@ Journal::formatLog(std::string&& message)
|
|||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& attributes = currentJsonLogContext_.attributes();
|
auto& messageParams = currentJsonLogContext_.messageParams();
|
||||||
|
|
||||||
attributes.RemoveMember("Message");
|
|
||||||
attributes.AddMember(
|
|
||||||
rapidjson::StringRef("Message"),
|
|
||||||
rapidjson::Value{rapidjson::StringRef(message.c_str()), currentJsonLogContext_.allocator()},
|
|
||||||
currentJsonLogContext_.allocator()
|
|
||||||
);
|
|
||||||
|
|
||||||
rapidjson::StringBuffer buffer;
|
rapidjson::StringBuffer buffer;
|
||||||
rapidjson::Writer writer(buffer);
|
rapidjson::Writer writer(buffer);
|
||||||
|
|
||||||
attributes.Accept(writer);
|
writer.StartObject();
|
||||||
|
if (globalLogAttributesJson_.has_value())
|
||||||
|
{
|
||||||
|
writer.Key("GlobalParams");
|
||||||
|
writer.RawValue(
|
||||||
|
globalLogAttributesJson_->c_str(),
|
||||||
|
globalLogAttributesJson_->length(),
|
||||||
|
rapidjson::kObjectType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentJsonLogContext_.journalAttributesJson().has_value())
|
||||||
|
{
|
||||||
|
writer.Key("JournalParams");
|
||||||
|
writer.RawValue(
|
||||||
|
currentJsonLogContext_.journalAttributesJson()->c_str(),
|
||||||
|
currentJsonLogContext_.journalAttributesJson()->length(),
|
||||||
|
rapidjson::kObjectType);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.Key("MessageParams");
|
||||||
|
messageParams.Accept(writer);
|
||||||
|
|
||||||
|
writer.Key("Message");
|
||||||
|
writer.String(message.c_str(), message.length());
|
||||||
|
|
||||||
|
writer.EndObject();
|
||||||
|
|
||||||
return {buffer.GetString()};
|
return {buffer.GetString()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Journal::rebuildAttributeJson()
|
||||||
|
{
|
||||||
|
if (m_attributes.has_value())
|
||||||
|
{
|
||||||
|
rapidjson::StringBuffer buffer;
|
||||||
|
rapidjson::Writer writer{buffer};
|
||||||
|
|
||||||
|
m_attributes->contextValues().Accept(writer);
|
||||||
|
|
||||||
|
m_attributesJson = {buffer.GetString()};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_attributesJson = {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Journal::enableStructuredJournal()
|
Journal::enableStructuredJournal()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -164,9 +164,11 @@ TEST_CASE("Global attributes")
|
|||||||
jsonLog.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
jsonLog.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(jsonLog.IsObject());
|
CHECK(jsonLog.IsObject());
|
||||||
CHECK(jsonLog.HasMember("Field1"));
|
CHECK(jsonLog.HasMember("GlobalParams"));
|
||||||
CHECK(jsonLog["Field1"].IsString());
|
CHECK(jsonLog["GlobalParams"].IsObject());
|
||||||
CHECK(jsonLog["Field1"].GetString() == std::string{"Value1"});
|
CHECK(jsonLog["GlobalParams"].HasMember("Field1"));
|
||||||
|
CHECK(jsonLog["GlobalParams"]["Field1"].IsString());
|
||||||
|
CHECK(jsonLog["GlobalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
beast::Journal::disableStructuredJournal();
|
beast::Journal::disableStructuredJournal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,12 +196,11 @@ TEST_CASE("Global attributes inheritable")
|
|||||||
jsonLog.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
jsonLog.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(jsonLog.IsObject());
|
CHECK(jsonLog.IsObject());
|
||||||
CHECK(jsonLog.HasMember("Field1"));
|
CHECK(jsonLog["GlobalParams"].HasMember("Field1"));
|
||||||
CHECK(jsonLog["Field1"].IsString());
|
CHECK(jsonLog["GlobalParams"]["Field1"].IsString());
|
||||||
// Field1 should be overwritten to Value3
|
CHECK(jsonLog["GlobalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
CHECK(jsonLog["Field1"].GetString() == std::string{"Value3"});
|
CHECK(jsonLog["JournalParams"]["Field1"].GetString() == std::string{"Value3"});
|
||||||
CHECK(jsonLog["Field2"].IsString());
|
CHECK(jsonLog["JournalParams"]["Field2"].GetString() == std::string{"Value2"});
|
||||||
CHECK(jsonLog["Field2"].GetString() == std::string{"Value2"});
|
|
||||||
beast::Journal::disableStructuredJournal();
|
beast::Journal::disableStructuredJournal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +235,9 @@ class JsonLogStreamFixture
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
JsonLogStreamFixture()
|
JsonLogStreamFixture()
|
||||||
: sink_(beast::severities::kAll, logStream_), j_(sink_)
|
: sink_(beast::severities::kAll, logStream_), j_(sink_, "Test", log::attributes(
|
||||||
|
log::attr("Field1", "Value1")
|
||||||
|
))
|
||||||
{
|
{
|
||||||
beast::Journal::enableStructuredJournal();
|
beast::Journal::enableStructuredJournal();
|
||||||
}
|
}
|
||||||
@@ -264,8 +267,9 @@ private:
|
|||||||
|
|
||||||
TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogFields")
|
TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogFields")
|
||||||
{
|
{
|
||||||
|
beast::Journal::addGlobalAttributes(log::attributes(log::attr("Field2", "Value2")));
|
||||||
journal().debug() << std::boolalpha << true << std::noboolalpha << " Test "
|
journal().debug() << std::boolalpha << true << std::noboolalpha << " Test "
|
||||||
<< std::boolalpha << false;
|
<< std::boolalpha << false << log::field("Field3", "Value3");
|
||||||
|
|
||||||
rapidjson::Document logValue;
|
rapidjson::Document logValue;
|
||||||
logValue.Parse(stream().str().c_str());
|
logValue.Parse(stream().str().c_str());
|
||||||
@@ -274,20 +278,27 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogFields")
|
|||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue.IsObject());
|
CHECK(logValue.IsObject());
|
||||||
CHECK(logValue.HasMember("Function"));
|
CHECK(logValue.HasMember("GlobalParams"));
|
||||||
CHECK(logValue.HasMember("File"));
|
CHECK(logValue.HasMember("JournalParams"));
|
||||||
CHECK(logValue.HasMember("Line"));
|
CHECK(logValue.HasMember("MessageParams"));
|
||||||
CHECK(logValue.HasMember("ThreadId"));
|
|
||||||
CHECK(logValue.HasMember("Params"));
|
|
||||||
CHECK(logValue.HasMember("Level"));
|
|
||||||
CHECK(logValue.HasMember("Message"));
|
CHECK(logValue.HasMember("Message"));
|
||||||
CHECK(logValue.HasMember("Time"));
|
|
||||||
|
|
||||||
CHECK(logValue["Function"].IsString());
|
CHECK(logValue["GlobalParams"].IsObject());
|
||||||
CHECK(logValue["File"].IsString());
|
CHECK(logValue["JournalParams"].IsObject());
|
||||||
CHECK(logValue["Line"].IsNumber());
|
CHECK(logValue["MessageParams"].IsObject());
|
||||||
CHECK(logValue["Params"].IsObject());
|
|
||||||
CHECK(logValue["Message"].IsString());
|
CHECK(logValue["Message"].IsString());
|
||||||
|
|
||||||
|
CHECK(logValue["MessageParams"].HasMember("Function"));
|
||||||
|
CHECK(logValue["MessageParams"].HasMember("File"));
|
||||||
|
CHECK(logValue["MessageParams"].HasMember("Line"));
|
||||||
|
CHECK(logValue["MessageParams"].HasMember("ThreadId"));
|
||||||
|
CHECK(logValue["MessageParams"].HasMember("Level"));
|
||||||
|
CHECK(logValue["MessageParams"].HasMember("Time"));
|
||||||
|
|
||||||
|
CHECK(logValue["MessageParams"]["Function"].IsString());
|
||||||
|
CHECK(logValue["MessageParams"]["File"].IsString());
|
||||||
|
CHECK(logValue["MessageParams"]["Line"].IsNumber());
|
||||||
|
|
||||||
CHECK(logValue["Message"].GetString() == std::string{"true Test false"});
|
CHECK(logValue["Message"].GetString() == std::string{"true Test false"});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,7 +316,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
|
|||||||
rapidjson::ParseErrorCode::kParseErrorNone);
|
rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kTrace));
|
beast::severities::to_string(beast::severities::kTrace));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,7 +332,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
|
|||||||
rapidjson::ParseErrorCode::kParseErrorNone);
|
rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kDebug));
|
beast::severities::to_string(beast::severities::kDebug));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,7 +348,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
|
|||||||
rapidjson::ParseErrorCode::kParseErrorNone);
|
rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kInfo));
|
beast::severities::to_string(beast::severities::kInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,7 +364,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
|
|||||||
rapidjson::ParseErrorCode::kParseErrorNone);
|
rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kWarning));
|
beast::severities::to_string(beast::severities::kWarning));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,7 +380,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
|
|||||||
rapidjson::ParseErrorCode::kParseErrorNone);
|
rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kError));
|
beast::severities::to_string(beast::severities::kError));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,7 +396,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
|
|||||||
rapidjson::ParseErrorCode::kParseErrorNone);
|
rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kFatal));
|
beast::severities::to_string(beast::severities::kFatal));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -401,7 +412,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogStream")
|
|||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Level"].GetString() ==
|
logValue["MessageParams"]["Level"].GetString() ==
|
||||||
beast::severities::to_string(beast::severities::kError));
|
beast::severities::to_string(beast::severities::kError));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,15 +429,12 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogParams")
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Params"].IsObject());
|
CHECK(logValue["MessageParams"].IsObject());
|
||||||
CHECK(logValue["Params"]["Field1"].IsNumber());
|
CHECK(logValue["MessageParams"]["Field1"].IsNumber());
|
||||||
CHECK(logValue["Params"]["Field1"].GetInt() == 1);
|
CHECK(logValue["MessageParams"]["Field1"].GetInt() == 1);
|
||||||
// UInt64 doesn't fit in Json::Value so it should be converted to a string
|
CHECK(logValue["MessageParams"]["Field2"].IsNumber());
|
||||||
// NOTE: We should expect it to be an int64 after we make the json library
|
|
||||||
// support in64 and uint64
|
|
||||||
CHECK(logValue["Params"]["Field2"].IsNumber());
|
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Params"]["Field2"].GetUint64() ==
|
logValue["MessageParams"]["Field2"].GetUint64() ==
|
||||||
std::numeric_limits<std::uint64_t>::max());
|
std::numeric_limits<std::uint64_t>::max());
|
||||||
CHECK(logValue["Message"].IsString());
|
CHECK(logValue["Message"].IsString());
|
||||||
CHECK(
|
CHECK(
|
||||||
@@ -447,15 +455,15 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogFields")
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Params"].IsObject());
|
CHECK(logValue["MessageParams"].IsObject());
|
||||||
CHECK(logValue["Params"]["Field1"].IsNumber());
|
CHECK(logValue["MessageParams"]["Field1"].IsNumber());
|
||||||
CHECK(logValue["Params"]["Field1"].GetInt() == 1);
|
CHECK(logValue["MessageParams"]["Field1"].GetInt() == 1);
|
||||||
// UInt64 doesn't fit in Json::Value so it should be converted to a string
|
// UInt64 doesn't fit in Json::Value so it should be converted to a string
|
||||||
// NOTE: We should expect it to be an int64 after we make the json library
|
// NOTE: We should expect it to be an int64 after we make the json library
|
||||||
// support in64 and uint64
|
// support in64 and uint64
|
||||||
CHECK(logValue["Params"]["Field2"].IsNumber());
|
CHECK(logValue["MessageParams"]["Field2"].IsNumber());
|
||||||
CHECK(
|
CHECK(
|
||||||
logValue["Params"]["Field2"].GetUint64() ==
|
logValue["MessageParams"]["Field2"].GetUint64() ==
|
||||||
std::numeric_limits<std::uint64_t>::max());
|
std::numeric_limits<std::uint64_t>::max());
|
||||||
CHECK(logValue["Message"].IsString());
|
CHECK(logValue["Message"].IsString());
|
||||||
CHECK(logValue["Message"].GetString() == std::string{"Test"});
|
CHECK(logValue["Message"].GetString() == std::string{"Test"});
|
||||||
@@ -475,10 +483,10 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJournalAttributes")
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Field1"].IsString());
|
CHECK(logValue["JournalParams"]["Field1"].IsString());
|
||||||
CHECK(logValue["Field1"].GetString() == std::string{"Value1"});
|
CHECK(logValue["JournalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
CHECK(logValue["Field2"].IsNumber());
|
CHECK(logValue["JournalParams"]["Field2"].IsNumber());
|
||||||
CHECK(logValue["Field2"].GetInt() == 2);
|
CHECK(logValue["JournalParams"]["Field2"].GetInt() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJournalAttributesInheritable")
|
TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJournalAttributesInheritable")
|
||||||
@@ -498,13 +506,13 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJournalAttributesInheritable")
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Field1"].IsString());
|
CHECK(logValue["JournalParams"]["Field1"].IsString());
|
||||||
CHECK(logValue["Field1"].GetString() == std::string{"Value1"});
|
CHECK(logValue["JournalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
CHECK(logValue["Field3"].IsString());
|
CHECK(logValue["JournalParams"]["Field3"].IsString());
|
||||||
CHECK(logValue["Field3"].GetString() == std::string{"Value3"});
|
CHECK(logValue["JournalParams"]["Field3"].GetString() == std::string{"Value3"});
|
||||||
// Field2 should be overwritten to 0
|
// Field2 should be overwritten to 0
|
||||||
CHECK(logValue["Field2"].IsNumber());
|
CHECK(logValue["JournalParams"]["Field2"].IsNumber());
|
||||||
CHECK(logValue["Field2"].GetInt() == 0);
|
CHECK(logValue["JournalParams"]["Field2"].GetInt() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE_FIXTURE(
|
TEST_CASE_FIXTURE(
|
||||||
@@ -526,13 +534,13 @@ TEST_CASE_FIXTURE(
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Field1"].IsString());
|
CHECK(logValue["JournalParams"]["Field1"].IsString());
|
||||||
CHECK(logValue["Field1"].GetString() == std::string{"Value1"});
|
CHECK(logValue["JournalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
CHECK(logValue["Field3"].IsString());
|
CHECK(logValue["JournalParams"]["Field3"].IsString());
|
||||||
CHECK(logValue["Field3"].GetString() == std::string{"Value3"});
|
CHECK(logValue["JournalParams"]["Field3"].GetString() == std::string{"Value3"});
|
||||||
// Field2 should be overwritten to 0
|
// Field2 should be overwritten to 0
|
||||||
CHECK(logValue["Field2"].IsNumber());
|
CHECK(logValue["JournalParams"]["Field2"].IsNumber());
|
||||||
CHECK(logValue["Field2"].GetInt() == 0);
|
CHECK(logValue["JournalParams"]["Field2"].GetInt() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE_FIXTURE(
|
TEST_CASE_FIXTURE(
|
||||||
@@ -555,10 +563,10 @@ TEST_CASE_FIXTURE(
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Field1"].IsString());
|
CHECK(logValue["JournalParams"]["Field1"].IsString());
|
||||||
CHECK(logValue["Field1"].GetString() == std::string{"Value1"});
|
CHECK(logValue["JournalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
CHECK(logValue["Field2"].IsNumber());
|
CHECK(logValue["JournalParams"]["Field2"].IsNumber());
|
||||||
CHECK(logValue["Field2"].GetInt() == 2);
|
CHECK(logValue["JournalParams"]["Field2"].GetInt() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE_FIXTURE(
|
TEST_CASE_FIXTURE(
|
||||||
@@ -581,8 +589,8 @@ TEST_CASE_FIXTURE(
|
|||||||
CHECK(
|
CHECK(
|
||||||
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
logValue.GetParseError() == rapidjson::ParseErrorCode::kParseErrorNone);
|
||||||
|
|
||||||
CHECK(logValue["Field1"].IsString());
|
CHECK(logValue["JournalParams"]["Field1"].IsString());
|
||||||
CHECK(logValue["Field1"].GetString() == std::string{"Value1"});
|
CHECK(logValue["JournalParams"]["Field1"].GetString() == std::string{"Value1"});
|
||||||
CHECK(logValue["Field2"].IsNumber());
|
CHECK(logValue["JournalParams"]["Field2"].IsNumber());
|
||||||
CHECK(logValue["Field2"].GetInt() == 2);
|
CHECK(logValue["JournalParams"]["Field2"].GetInt() == 2);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user