Skip to content

Commit fd06d84

Browse files
authored
Add attributes for InstrumentationScope (#2004)
1 parent 075f45d commit fd06d84

17 files changed

+599
-187
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Increment the:
1515

1616
## [Unreleased]
1717

18+
* [SDK]Add attributes for InstrumentationScope
19+
[#2004](https://github.com/open-telemetry/opentelemetry-cpp/pull/2004)
1820
* [ETW Exporter]Support serialize span/log attributes into JSON
1921
[#1991](https://github.com/open-telemetry/opentelemetry-cpp/pull/1991)
2022
* ETW Exporter]Do not overwrite ParentId when setting attribute on Span

api/include/opentelemetry/common/key_value_iterable_view.h

+56
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <utility>
99

1010
#include "opentelemetry/common/key_value_iterable.h"
11+
#include "opentelemetry/nostd/span.h"
12+
#include "opentelemetry/nostd/string_view.h"
1113
#include "opentelemetry/nostd/type_traits.h"
1214
#include "opentelemetry/nostd/utility.h"
1315
#include "opentelemetry/version.h"
@@ -81,5 +83,59 @@ KeyValueIterableView<T> MakeKeyValueIterableView(const T &container) noexcept
8183
return KeyValueIterableView<T>(container);
8284
}
8385

86+
/**
87+
* Utility function to help to make a attribute view from initializer_list
88+
*
89+
* @param attributes
90+
* @return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
91+
*/
92+
inline static nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
93+
MakeAttributes(std::initializer_list<std::pair<nostd::string_view, common::AttributeValue>>
94+
attributes) noexcept
95+
{
96+
return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>{
97+
attributes.begin(), attributes.end()};
98+
}
99+
100+
/**
101+
* Utility function to help to make a attribute view from a span
102+
*
103+
* @param attributes
104+
* @return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
105+
*/
106+
inline static nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
107+
MakeAttributes(
108+
nostd::span<const std::pair<nostd::string_view, common::AttributeValue>> attributes) noexcept
109+
{
110+
return attributes;
111+
}
112+
113+
/**
114+
* Utility function to help to make a attribute view from a KeyValueIterable
115+
*
116+
* @param attributes
117+
* @return common::KeyValueIterable
118+
*/
119+
inline static const common::KeyValueIterable &MakeAttributes(
120+
const common::KeyValueIterable &attributes) noexcept
121+
{
122+
return attributes;
123+
}
124+
125+
/**
126+
* Utility function to help to make a attribute view from a key-value iterable object
127+
*
128+
* @param attributes
129+
* @return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
130+
*/
131+
template <
132+
class ArgumentType,
133+
nostd::enable_if_t<common::detail::is_key_value_iterable<ArgumentType>::value> * = nullptr>
134+
inline static common::KeyValueIterableView<ArgumentType> MakeAttributes(
135+
const ArgumentType &arg) noexcept
136+
{
137+
return common::KeyValueIterableView<ArgumentType>(arg);
138+
}
139+
84140
} // namespace common
85141
OPENTELEMETRY_END_NAMESPACE

api/include/opentelemetry/logs/logger.h

-69
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,12 @@
44
#pragma once
55
#ifdef ENABLE_LOGS_PREVIEW
66

7-
# include <chrono>
8-
# include <map>
9-
# include <vector>
10-
11-
# include "opentelemetry/common/attribute_value.h"
127
# include "opentelemetry/common/key_value_iterable.h"
13-
# include "opentelemetry/common/key_value_iterable_view.h"
14-
# include "opentelemetry/common/macros.h"
15-
# include "opentelemetry/common/timestamp.h"
168
# include "opentelemetry/logs/log_record.h"
179
# include "opentelemetry/logs/logger_type_traits.h"
1810
# include "opentelemetry/logs/severity.h"
19-
# include "opentelemetry/nostd/shared_ptr.h"
20-
# include "opentelemetry/nostd/span.h"
2111
# include "opentelemetry/nostd/string_view.h"
22-
# include "opentelemetry/nostd/type_traits.h"
2312
# include "opentelemetry/nostd/unique_ptr.h"
24-
# include "opentelemetry/trace/span_context.h"
25-
# include "opentelemetry/trace/span_id.h"
26-
# include "opentelemetry/trace/trace_flags.h"
27-
# include "opentelemetry/trace/trace_id.h"
2813
# include "opentelemetry/version.h"
2914

3015
OPENTELEMETRY_BEGIN_NAMESPACE
@@ -36,60 +21,6 @@ namespace logs
3621
class Logger
3722
{
3823
public:
39-
/**
40-
* Utility function to help to make a attribute view from initializer_list
41-
*
42-
* @param attributes
43-
* @return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
44-
*/
45-
inline static nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
46-
MakeAttributes(std::initializer_list<std::pair<nostd::string_view, common::AttributeValue>>
47-
attributes) noexcept
48-
{
49-
return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>{
50-
attributes.begin(), attributes.end()};
51-
}
52-
53-
/**
54-
* Utility function to help to make a attribute view from a span
55-
*
56-
* @param attributes
57-
* @return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
58-
*/
59-
inline static nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
60-
MakeAttributes(
61-
nostd::span<const std::pair<nostd::string_view, common::AttributeValue>> attributes) noexcept
62-
{
63-
return attributes;
64-
}
65-
66-
/**
67-
* Utility function to help to make a attribute view from a KeyValueIterable
68-
*
69-
* @param attributes
70-
* @return common::KeyValueIterable
71-
*/
72-
inline static const common::KeyValueIterable &MakeAttributes(
73-
const common::KeyValueIterable &attributes) noexcept
74-
{
75-
return attributes;
76-
}
77-
78-
/**
79-
* Utility function to help to make a attribute view from a key-value iterable object
80-
*
81-
* @param attributes
82-
* @return nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>
83-
*/
84-
template <
85-
class ArgumentType,
86-
nostd::enable_if_t<common::detail::is_key_value_iterable<ArgumentType>::value> * = nullptr>
87-
inline static common::KeyValueIterableView<ArgumentType> MakeAttributes(
88-
const ArgumentType &arg) noexcept
89-
{
90-
return common::KeyValueIterableView<ArgumentType>(arg);
91-
}
92-
9324
virtual ~Logger() = default;
9425

9526
/* Returns the name of the logger */

api/include/opentelemetry/logs/logger_type_traits.h

-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,10 @@
55
#ifdef ENABLE_LOGS_PREVIEW
66

77
# include <chrono>
8-
# include <map>
98
# include <type_traits>
10-
# include <vector>
119

1210
# include "opentelemetry/common/attribute_value.h"
1311
# include "opentelemetry/common/key_value_iterable.h"
14-
# include "opentelemetry/common/key_value_iterable_view.h"
15-
# include "opentelemetry/common/macros.h"
1612
# include "opentelemetry/common/timestamp.h"
1713
# include "opentelemetry/logs/log_record.h"
1814
# include "opentelemetry/logs/severity.h"

api/test/logs/logger_test.cc

+34-24
Original file line numberDiff line numberDiff line change
@@ -61,48 +61,54 @@ TEST(Logger, LogMethodOverloads)
6161
logger->EmitLogRecord(Severity::kDebug, m);
6262
logger->EmitLogRecord(Severity::kWarn, "Logging a map", m);
6363
logger->EmitLogRecord(Severity::kError,
64-
Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
64+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
6565
logger->EmitLogRecord(Severity::kFatal, "Logging an initializer list",
66-
Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
67-
logger->EmitLogRecord(Severity::kDebug, Logger::MakeAttributes(m));
66+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
67+
logger->EmitLogRecord(Severity::kDebug, opentelemetry::common::MakeAttributes(m));
6868
logger->EmitLogRecord(Severity::kDebug,
6969
common::KeyValueIterableView<std::map<std::string, std::string>>(m));
7070
std::pair<nostd::string_view, common::AttributeValue> array[] = {{"key1", "value1"}};
71-
logger->EmitLogRecord(Severity::kDebug, Logger::MakeAttributes(array));
71+
logger->EmitLogRecord(Severity::kDebug, opentelemetry::common::MakeAttributes(array));
7272
std::vector<std::pair<std::string, std::string>> vec = {{"key1", "value1"}};
73-
logger->EmitLogRecord(Severity::kDebug, Logger::MakeAttributes(vec));
73+
logger->EmitLogRecord(Severity::kDebug, opentelemetry::common::MakeAttributes(vec));
7474

7575
// Severity methods
7676
logger->Trace("Test log message");
7777
logger->Trace("Test log message", m);
78-
logger->Trace("Test log message", Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
78+
logger->Trace("Test log message",
79+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
7980
logger->Trace(m);
80-
logger->Trace(Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
81+
logger->Trace(opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
8182
logger->Debug("Test log message");
8283
logger->Debug("Test log message", m);
83-
logger->Debug("Test log message", Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
84+
logger->Debug("Test log message",
85+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
8486
logger->Debug(m);
85-
logger->Debug(Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
87+
logger->Debug(opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
8688
logger->Info("Test log message");
8789
logger->Info("Test log message", m);
88-
logger->Info("Test log message", Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
90+
logger->Info("Test log message",
91+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
8992
logger->Info(m);
90-
logger->Info(Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
93+
logger->Info(opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
9194
logger->Warn("Test log message");
9295
logger->Warn("Test log message", m);
93-
logger->Warn("Test log message", Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
96+
logger->Warn("Test log message",
97+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
9498
logger->Warn(m);
95-
logger->Warn(Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
99+
logger->Warn(opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
96100
logger->Error("Test log message");
97101
logger->Error("Test log message", m);
98-
logger->Error("Test log message", Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
102+
logger->Error("Test log message",
103+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
99104
logger->Error(m);
100-
logger->Error(Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
105+
logger->Error(opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
101106
logger->Fatal("Test log message");
102107
logger->Fatal("Test log message", m);
103-
logger->Fatal("Test log message", Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
108+
logger->Fatal("Test log message",
109+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
104110
logger->Fatal(m);
105-
logger->Fatal(Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
111+
logger->Fatal(opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
106112
}
107113

108114
TEST(Logger, EventLogMethodOverloads)
@@ -120,17 +126,21 @@ TEST(Logger, EventLogMethodOverloads)
120126
event_logger->EmitEvent("event name", Severity::kInfo, "Test log message");
121127
event_logger->EmitEvent("event name", Severity::kDebug, m);
122128
event_logger->EmitEvent("event name", Severity::kWarn, "Logging a map", m);
123-
event_logger->EmitEvent("event name", Severity::kError,
124-
Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
125-
event_logger->EmitEvent("event name", Severity::kFatal, "Logging an initializer list",
126-
Logger::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
127-
event_logger->EmitEvent("event name", Severity::kDebug, Logger::MakeAttributes(m));
129+
event_logger->EmitEvent(
130+
"event name", Severity::kError,
131+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
132+
event_logger->EmitEvent(
133+
"event name", Severity::kFatal, "Logging an initializer list",
134+
opentelemetry::common::MakeAttributes({{"key1", "value 1"}, {"key2", 2}}));
135+
event_logger->EmitEvent("event name", Severity::kDebug, opentelemetry::common::MakeAttributes(m));
128136
event_logger->EmitEvent("event name", Severity::kDebug,
129137
common::KeyValueIterableView<std::map<std::string, std::string>>(m));
130138
std::pair<nostd::string_view, common::AttributeValue> array[] = {{"key1", "value1"}};
131-
event_logger->EmitEvent("event name", Severity::kDebug, Logger::MakeAttributes(array));
139+
event_logger->EmitEvent("event name", Severity::kDebug,
140+
opentelemetry::common::MakeAttributes(array));
132141
std::vector<std::pair<std::string, std::string>> vec = {{"key1", "value1"}};
133-
event_logger->EmitEvent("event name", Severity::kDebug, Logger::MakeAttributes(vec));
142+
event_logger->EmitEvent("event name", Severity::kDebug,
143+
opentelemetry::common::MakeAttributes(vec));
134144
}
135145

136146
// Define a basic Logger class

exporters/etw/test/etw_logger_test.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ TEST(ETWLogger, LoggerCheckWithAttributes)
9696
// Log attributes
9797
Properties attribs = {{"attrib1", 1}, {"attrib2", 2}};
9898
EXPECT_NO_THROW(logger->EmitLogRecord(opentelemetry::logs::Severity::kDebug,
99-
Logger::MakeAttributes(attribs)));
99+
opentelemetry::common::MakeAttributes(attribs)));
100100
}
101101

102102
# endif // _WIN32

exporters/ostream/src/log_record_exporter.cc

+13-8
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,26 @@ sdk::common::ExportResult OStreamLogRecordExporter::Export(
8888

8989
sout_ << " body : ";
9090
opentelemetry::exporter::ostream_common::print_value(log_record->GetBody(), sout_);
91-
sout_ << "\n";
91+
sout_ << "\n resource : ";
92+
printAttributes(log_record->GetResource().GetAttributes(), "\n ");
9293

93-
sout_ << " resource : ";
94-
printAttributes(log_record->GetResource().GetAttributes());
94+
sout_ << "\n attributes : ";
9595

96-
sout_ << "\n"
97-
<< " attributes : ";
98-
99-
printAttributes(log_record->GetAttributes());
96+
printAttributes(log_record->GetAttributes(), "\n ");
10097

10198
sout_ << "\n"
10299
<< " trace_id : " << std::string(trace_id, trace_id_len) << "\n"
103100
<< " span_id : " << std::string(span_id, span_id__len) << "\n"
104101
<< " trace_flags : " << std::string(trace_flags, trace_flags_len) << "\n"
105-
<< "}\n";
102+
<< " scope : \n"
103+
<< " name : " << log_record->GetInstrumentationScope().GetName() << "\n"
104+
<< " version : " << log_record->GetInstrumentationScope().GetVersion() << "\n"
105+
<< " schema_url : " << log_record->GetInstrumentationScope().GetSchemaURL()
106+
<< "\n"
107+
<< " attributes : ";
108+
109+
printAttributes(log_record->GetInstrumentationScope().GetAttributes(), "\n ");
110+
sout_ << "\n}\n";
106111
}
107112

108113
return sdk::common::ExportResult::kSuccess;

0 commit comments

Comments
 (0)