Skip to content

Commit 9c767df

Browse files
marcalffyurishkuro
andauthored
[API] Return NoopLogRecord from NoopLogger (#2668)
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
1 parent 2db27dd commit 9c767df

File tree

5 files changed

+32
-16
lines changed

5 files changed

+32
-16
lines changed

api/include/opentelemetry/logs/event_logger.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ class EventLogger
6464
return;
6565
}
6666
nostd::unique_ptr<LogRecord> log_record = delegate_logger->CreateLogRecord();
67-
if (!log_record)
68-
{
69-
return;
70-
}
7167

7268
IgnoreTraitResult(
7369
detail::LogRecordSetterTrait<typename std::decay<ArgumentType>::type>::template Set(

api/include/opentelemetry/logs/logger.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,6 @@ class Logger
100100
void EmitLogRecord(ArgumentType &&... args)
101101
{
102102
nostd::unique_ptr<LogRecord> log_record = CreateLogRecord();
103-
if (!log_record)
104-
{
105-
return;
106-
}
107103

108104
EmitLogRecord(std::move(log_record), std::forward<ArgumentType>(args)...);
109105
}

api/include/opentelemetry/logs/noop.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,39 @@ class NoopLogger final : public Logger
3434
public:
3535
const nostd::string_view GetName() noexcept override { return "noop logger"; }
3636

37-
nostd::unique_ptr<LogRecord> CreateLogRecord() noexcept override { return nullptr; }
37+
nostd::unique_ptr<LogRecord> CreateLogRecord() noexcept override
38+
{
39+
/*
40+
* Do not return memory shared between threads,
41+
* a `new` + `delete` for each noop record can not be avoided,
42+
* due to the semantic of unique_ptr.
43+
*/
44+
return nostd::unique_ptr<LogRecord>(new NoopLogRecord());
45+
}
3846

3947
using Logger::EmitLogRecord;
4048

4149
void EmitLogRecord(nostd::unique_ptr<LogRecord> &&) noexcept override {}
50+
51+
private:
52+
class NoopLogRecord : public LogRecord
53+
{
54+
public:
55+
NoopLogRecord() = default;
56+
~NoopLogRecord() override = default;
57+
58+
void SetTimestamp(common::SystemTimestamp /* timestamp */) noexcept override {}
59+
void SetObservedTimestamp(common::SystemTimestamp /* timestamp */) noexcept override {}
60+
void SetSeverity(logs::Severity /* severity */) noexcept override {}
61+
void SetBody(const common::AttributeValue & /* message */) noexcept override {}
62+
void SetAttribute(nostd::string_view /* key */,
63+
const common::AttributeValue & /* value */) noexcept override
64+
{}
65+
void SetEventId(int64_t /* id */, nostd::string_view /* name */) noexcept override {}
66+
void SetTraceId(const trace::TraceId & /* trace_id */) noexcept override {}
67+
void SetSpanId(const trace::SpanId & /* span_id */) noexcept override {}
68+
void SetTraceFlags(const trace::TraceFlags & /* trace_flags */) noexcept override {}
69+
};
4270
};
4371

4472
/**

api/test/logs/logger_test.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ TEST(Logger, GetLoggerDefault)
2828
auto lp = Provider::GetLoggerProvider();
2929
const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"};
3030
auto logger = lp->GetLogger("TestLogger", "opentelelemtry_library", "", schema_url);
31-
auto name = logger->GetName();
3231
EXPECT_NE(nullptr, logger);
32+
auto name = logger->GetName();
3333
EXPECT_EQ(name, "noop logger");
34+
auto record = logger->CreateLogRecord();
35+
EXPECT_NE(nullptr, record);
3436
}
3537

3638
// Test the two additional overloads for GetLogger()

sdk/src/logs/logger.cc

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ const nostd::string_view Logger::GetName() noexcept
3333

3434
nostd::unique_ptr<opentelemetry::logs::LogRecord> Logger::CreateLogRecord() noexcept
3535
{
36-
// If this logger does not have a processor, no need to create a log recordable
37-
if (!context_)
38-
{
39-
return nullptr;
40-
}
41-
4236
auto recordable = context_->GetProcessor().MakeRecordable();
4337

4438
recordable->SetObservedTimestamp(std::chrono::system_clock::now());

0 commit comments

Comments
 (0)