Skip to content

Commit

Permalink
Supporting Logging API .Log() Overloads and GetName() method (open-te…
Browse files Browse the repository at this point in the history
  • Loading branch information
MarkSeufert authored and Karen Xu committed Dec 22, 2020
1 parent 96dfb8a commit e5d498b
Show file tree
Hide file tree
Showing 10 changed files with 508 additions and 44 deletions.
457 changes: 446 additions & 11 deletions api/include/opentelemetry/logs/logger.h

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions api/include/opentelemetry/logs/noop.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ namespace logs
class NoopLogger final : public Logger
{
public:
const nostd::string_view GetName() noexcept override { return "noop logger"; }

void Log(Severity severity,
nostd::string_view name,
nostd::string_view body,
Expand Down
4 changes: 2 additions & 2 deletions api/test/logs/BUILD
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
load("//bazel:otel_cc_benchmark.bzl", "otel_cc_benchmark")

cc_test(
name = "logger_provider_test",
name = "provider_test",
srcs = [
"logger_provider_test.cc",
"provider_test.cc",
],
deps = [
"//api",
Expand Down
10 changes: 5 additions & 5 deletions api/test/logs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
foreach(testname logger_provider_test logger_test)
add_executable(${testname} "${testname}.cc")
target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES}
foreach(testname provider_test logger_test)
add_executable(logs_api_${testname} "${testname}.cc")
target_link_libraries(logs_api_${testname} ${GTEST_BOTH_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT} opentelemetry_api)
gtest_add_tests(
TARGET ${testname}
TARGET logs_api_${testname}
TEST_PREFIX logs.
TEST_LIST ${testname})
TEST_LIST logs_api_${testname})
endforeach()
53 changes: 35 additions & 18 deletions api/test/logs/logger_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,40 +14,61 @@ using opentelemetry::nostd::shared_ptr;
using opentelemetry::nostd::span;
using opentelemetry::nostd::string_view;

// Check that the default logger is a noop logger instance
TEST(Logger, GetLoggerDefault)
{
auto lp = Provider::GetLoggerProvider();
auto logger = lp->GetLogger("TestLogger");
auto name = logger->GetName();
EXPECT_NE(nullptr, logger);
EXPECT_EQ(name, "noop logger");
}

TEST(Logger, GetNoopLoggerName)
{
auto lp = Provider::GetLoggerProvider();
auto logger = lp->GetLogger("TestLogger");
}

// Test the two additional overloads for GetLogger()
TEST(Logger, GetNoopLoggerNameWithArgs)
{
auto lp = Provider::GetLoggerProvider();

// GetLogger(name, list(args))
std::array<string_view, 1> sv{"string"};
span<string_view> args{sv};
auto logger = lp->GetLogger("NoopLoggerWithArgs", args);
// should probably also test that arguments were set properly too
// by adding a getArgs() method in NoopLogger
lp->GetLogger("NoopLoggerWithArgs", args);

// GetLogger(name, string options)
lp->GetLogger("NoopLoggerWithOptions", "options");
}

TEST(Logger, NoopLog)
// Test the Log() overloads
TEST(Logger, LogMethodOverloads)
{
auto lp = Provider::GetLoggerProvider();
auto logger = lp->GetLogger("TestLogger");
logger->Log("Noop log name");

// Create a map to test the logs with
std::map<std::string, std::string> m = {{"key1", "value1"}};

// Log overloads
logger->Log(Severity::kTrace, "Test log message");
logger->Log(Severity::kInfo, "Logging a message", "Test log message");
logger->Log(Severity::kDebug, m);
logger->Log(Severity::kWarn, "Logging a map", m);
logger->Log(Severity::kError, {{"key1", "value 1"}, {"key2", 2}});
logger->Log(Severity::kFatal, "Logging an initializer list", {{"key1", "value 1"}, {"key2", 2}});

// Severity methods
logger->Trace("Test log message");
logger->Debug("Logging a message", "Test log message");
logger->Info(m);
logger->Warn("Logging a map", m);
logger->Error({{"key1", "value 1"}, {"key2", 2}});
logger->Fatal("Logging an initializer list", {{"key1", "value 1"}, {"key2", 2}});
}

// Define a basic Logger class
class TestLogger : public Logger
{
const opentelemetry::nostd::string_view GetName() noexcept override { return "test logger"; }

void Log(Severity severity,
string_view name,
string_view body,
Expand Down Expand Up @@ -82,11 +103,7 @@ TEST(Logger, PushLoggerImplementation)

auto lp = Provider::GetLoggerProvider();

// GetLogger(name, options) function
// Check that the implementation was pushed by calling TestLogger's GetName()
auto logger = lp->GetLogger("TestLogger");

// GetLogger(name, args) function
std::array<string_view, 1> sv{"string"};
span<string_view> args{sv};
auto logger2 = lp->GetLogger("TestLogger2", args);
}
ASSERT_EQ("test logger", logger->GetName());
}
File renamed without changes.
2 changes: 1 addition & 1 deletion exporters/ostream/test/ostream_log_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ TEST(OStreamLogExporter, IntegrationTest)

// Write a log to ostream exporter
opentelemetry::core::SystemTimestamp now(std::chrono::system_clock::now());
logger->Log(opentelemetry::logs::Severity::kDebug, "Hello", now);
logger->Log(opentelemetry::logs::Severity::kDebug, "", "Hello", {}, {}, {}, {}, {}, now);

// Restore cout's original streambuf
std::cout.rdbuf(original);
Expand Down
6 changes: 6 additions & 0 deletions sdk/include/opentelemetry/sdk/logs/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,17 @@ class Logger final : public opentelemetry::logs::Logger
public:
/**
* Initialize a new logger.
* @param name The name of this logger instance
* @param logger_provider The logger provider that owns this logger.
*/
explicit Logger(opentelemetry::nostd::string_view name,
std::shared_ptr<LoggerProvider> logger_provider) noexcept;

/**
* Returns the name of this logger.
*/
const opentelemetry::nostd::string_view GetName() noexcept override;

/**
* Writes a log record into the processor.
* @param severity the severity level of the log event.
Expand Down
5 changes: 5 additions & 0 deletions sdk/src/logs/logger.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ Logger::Logger(opentelemetry::nostd::string_view name,
: logger_name_(std::string(name)), logger_provider_(logger_provider)
{}

const opentelemetry::nostd::string_view Logger::GetName() noexcept
{
return logger_name_;
}

/**
* Create and populate recordable with the log event's fields passed in.
* The timestamp, severity, traceid, spanid, and traceflags, are injected
Expand Down
13 changes: 6 additions & 7 deletions sdk/test/logs/logger_sdk_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ TEST(LoggerSDK, LogToNullProcessor)
auto logger = lp->GetLogger("logger");

// Log a sample log record to a nullptr processor
logger->Log("Test log");
logger->Debug("Test log");
}

class MockProcessor final : public LogProcessor
Expand All @@ -56,11 +56,11 @@ class MockProcessor final : public LogProcessor
// Cast the recordable received into a concrete LogRecord type
auto copy = std::shared_ptr<LogRecord>(static_cast<LogRecord *>(record.release()));

// Copy over the received log record's name, body, timestamp fields over to the recordable
// Copy over the received log record's severity, name, and body fields over to the recordable
// passed in the constructor
record_received_->SetSeverity(copy->GetSeverity());
record_received_->SetName(copy->GetName());
record_received_->SetBody(copy->GetBody());
record_received_->SetTimestamp(copy->GetTimestamp());
}
bool ForceFlush(std::chrono::microseconds timeout = std::chrono::microseconds(0)) noexcept
{
Expand Down Expand Up @@ -92,10 +92,9 @@ TEST(LoggerSDK, LogToAProcessor)
ASSERT_EQ(processor, lp->GetProcessor());

// Check that the recordable created by the Log() statement is set properly
opentelemetry::core::SystemTimestamp now(std::chrono::system_clock::now());
logger->Log(opentelemetry::logs::Severity::kWarn, "Message", now);
logger->Log(opentelemetry::logs::Severity::kWarn, "Log Name", "Log Message");

ASSERT_EQ(shared_recordable->GetSeverity(), opentelemetry::logs::Severity::kWarn);
ASSERT_EQ(shared_recordable->GetBody(), "Message");
ASSERT_EQ(shared_recordable->GetTimestamp().time_since_epoch(), now.time_since_epoch());
ASSERT_EQ(shared_recordable->GetName(), "Log Name");
ASSERT_EQ(shared_recordable->GetBody(), "Log Message");
}

0 comments on commit e5d498b

Please sign in to comment.