@@ -17,50 +17,58 @@ namespace logs
17
17
18
18
namespace api_logs = opentelemetry::logs;
19
19
20
- Recordable::Recordable () noexcept
21
- {
22
- event_builder_.Reset (" OpenTelemetry-Logs" );
23
-
24
- utils::PopulateAttribute (" __csver__" , static_cast <uint16_t >(0x400 ), event_builder_);
25
- }
20
+ Recordable::Recordable () noexcept {}
26
21
27
22
void Recordable::SetSeverity (api_logs::Severity severity) noexcept
28
23
{
29
24
uint8_t severity_value = static_cast <uint8_t >(severity);
30
- if (severity_value == 0 || severity_value > 24 )
25
+ if (severity_value > 24 )
31
26
{
32
27
OTEL_INTERNAL_LOG_ERROR (
33
28
" [user_events Log Exporter] Recordable: invalid severity value: " << severity_value);
34
- severity_value = 1 ;
29
+ severity_value = 0 ;
35
30
}
36
31
32
+ severity_ = severity_value;
37
33
level_index_ = (severity_value - 1 ) >> 2 ;
38
-
39
- cs_part_b_bookmark_size_ += 2 ;
40
- event_builder_.AddValue (" severityNumber" , static_cast <uint16_t >(severity_value),
41
- event_field_format_default);
42
- auto severity_text = api_logs::SeverityNumToText[static_cast <uint32_t >(severity_value)].data ();
43
- event_builder_.AddString <char >(" severityText" , severity_text, event_field_format_default);
44
34
}
45
35
46
36
void Recordable::SetBody (const opentelemetry::common::AttributeValue &message) noexcept
47
37
{
48
- // Set intial bookmark size to 1 for body below.
49
- cs_part_b_bookmark_size_++;
38
+ if (severity_ == 0 )
39
+ {
40
+ OTEL_INTERNAL_LOG_ERROR (" [user_events Log Exporter] Recordable: severity is not set." );
41
+ return ;
42
+ }
43
+
44
+ auto event_name = !event_name_.empty () ? event_name_.data () : " OpenTelemetryLogs" ;
45
+
46
+ event_builder_.Reset (event_name);
47
+ utils::PopulateAttribute (" __csver__" , static_cast <uint16_t >(0x400 ), event_builder_);
48
+
50
49
event_builder_.AddStruct (" PartB" , 1 , 0 , &cs_part_b_bookmark_);
51
50
utils::PopulateAttribute (" _typeName" , " Log" , event_builder_);
51
+
52
+ event_builder_.AddValue (" severityNumber" , static_cast <uint16_t >(severity_),
53
+ event_field_format_default);
54
+ auto severity_text = api_logs::SeverityNumToText[static_cast <uint32_t >(severity_)].data ();
55
+ event_builder_.AddString <char >(" severityText" , severity_text, event_field_format_default);
56
+ cs_part_b_bookmark_size_ = 4 ; // with the below body counted because it is available.
57
+
58
+ if (has_event_id_)
59
+ {
60
+ utils::PopulateAttribute (" eventId" , event_id_, event_builder_);
61
+ cs_part_b_bookmark_size_++;
62
+ }
63
+
52
64
utils::PopulateAttribute (" body" , message, event_builder_);
53
65
}
54
66
55
67
void Recordable::SetEventId (int64_t id, nostd::string_view name) noexcept
56
68
{
57
- cs_part_b_bookmark_size_++;
58
- utils::PopulateAttribute (" eventId" , id, event_builder_);
59
- if (!name.empty ())
60
- {
61
- cs_part_b_bookmark_size_++;
62
- utils::PopulateAttribute (" name" , name, event_builder_);
63
- }
69
+ has_event_id_ = true ;
70
+ event_id_ = id;
71
+ event_name_ = name;
64
72
}
65
73
66
74
void Recordable::SetTraceId (const opentelemetry::trace::TraceId &trace_id) noexcept
@@ -96,10 +104,17 @@ void Recordable::SetTimestamp(opentelemetry::common::SystemTimestamp timestamp)
96
104
97
105
bool Recordable::PrepareExport () noexcept
98
106
{
99
- if (cs_part_b_bookmark_size_ > 0 )
107
+ if (cs_part_b_bookmark_size_ == 0 )
108
+ {
109
+ // Part B is mandatory for exporting to user_events.
110
+ OTEL_INTERNAL_LOG_ERROR (" [user_events Log Exporter] Recordable: no data to export." );
111
+ return false ;
112
+ }
113
+ else
100
114
{
101
115
event_builder_.SetStructFieldCount (cs_part_b_bookmark_, cs_part_b_bookmark_size_);
102
116
}
117
+
103
118
if (cs_part_c_bookmark_size_ > 0 )
104
119
{
105
120
event_builder_.SetStructFieldCount (cs_part_c_bookmark_, cs_part_c_bookmark_size_);
0 commit comments