@@ -4,12 +4,14 @@ use std::time::SystemTime;
4
4
use async_trait:: async_trait;
5
5
use criterion:: { criterion_group, criterion_main, Criterion } ;
6
6
7
- use opentelemetry:: logs:: { AnyValue , LogRecord , LogResult , Logger , LoggerProvider as _, Severity } ;
7
+ use opentelemetry:: logs:: {
8
+ AnyValue , LogRecord as _, LogResult , Logger as _, LoggerProvider as _, Severity ,
9
+ } ;
8
10
use opentelemetry:: trace:: Tracer ;
9
11
use opentelemetry:: trace:: TracerProvider as _;
10
12
use opentelemetry:: Key ;
11
13
use opentelemetry_sdk:: export:: logs:: { LogData , LogExporter } ;
12
- use opentelemetry_sdk:: logs:: LoggerProvider ;
14
+ use opentelemetry_sdk:: logs:: { Logger , LoggerProvider } ;
13
15
use opentelemetry_sdk:: trace:: { config, Sampler , TracerProvider } ;
14
16
15
17
#[ derive( Debug ) ]
@@ -22,7 +24,7 @@ impl LogExporter for VoidExporter {
22
24
}
23
25
}
24
26
25
- fn log_benchmark_group < F : Fn ( & dyn Logger ) > ( c : & mut Criterion , name : & str , f : F ) {
27
+ fn log_benchmark_group < F : Fn ( & Logger ) > ( c : & mut Criterion , name : & str , f : F ) {
26
28
let mut group = c. benchmark_group ( name) ;
27
29
28
30
group. bench_function ( "no-context" , |b| {
@@ -59,53 +61,45 @@ fn log_benchmark_group<F: Fn(&dyn Logger)>(c: &mut Criterion, name: &str, f: F)
59
61
60
62
fn criterion_benchmark ( c : & mut Criterion ) {
61
63
log_benchmark_group ( c, "simple-log" , |logger| {
62
- logger. emit ( LogRecord :: builder ( ) . with_body ( "simple log" ) . build ( ) )
64
+ let mut log_record = logger. create_log_record ( ) ;
65
+ log_record. set_body ( "simple log" . into ( ) ) ;
66
+ logger. emit ( log_record) ;
63
67
} ) ;
64
68
65
69
log_benchmark_group ( c, "simple-log-with-int" , |logger| {
66
- logger. emit (
67
- LogRecord :: builder ( )
68
- . with_body ( "simple log" )
69
- . with_attribute ( "testint" , 2 )
70
- . build ( ) ,
71
- )
70
+ let mut log_record = logger. create_log_record ( ) ;
71
+ log_record. set_body ( "simple log" . into ( ) ) ;
72
+ log_record. add_attribute ( "testint" , 2 ) ;
73
+ logger. emit ( log_record) ;
72
74
} ) ;
73
75
74
76
log_benchmark_group ( c, "simple-log-with-double" , |logger| {
75
- logger. emit (
76
- LogRecord :: builder ( )
77
- . with_body ( "simple log" )
78
- . with_attribute ( "testdouble" , 2.2 )
79
- . build ( ) ,
80
- )
77
+ let mut log_record = logger. create_log_record ( ) ;
78
+ log_record. set_body ( "simple log" . into ( ) ) ;
79
+ log_record. add_attribute ( "testdouble" , 2.2 ) ;
80
+ logger. emit ( log_record) ;
81
81
} ) ;
82
82
83
83
log_benchmark_group ( c, "simple-log-with-string" , |logger| {
84
- logger. emit (
85
- LogRecord :: builder ( )
86
- . with_body ( "simple log" )
87
- . with_attribute ( "teststring" , "test" )
88
- . build ( ) ,
89
- )
84
+ let mut log_record = logger. create_log_record ( ) ;
85
+ log_record. set_body ( "simple log" . into ( ) ) ;
86
+ log_record. add_attribute ( "teststring" , "test" ) ;
87
+ logger. emit ( log_record) ;
90
88
} ) ;
91
89
92
90
log_benchmark_group ( c, "simple-log-with-bool" , |logger| {
93
- logger. emit (
94
- LogRecord :: builder ( )
95
- . with_body ( "simple log" )
96
- . with_attribute ( "testbool" , AnyValue :: Boolean ( true ) )
97
- . build ( ) ,
98
- )
91
+ let mut log_record = logger. create_log_record ( ) ;
92
+ log_record. set_body ( "simple log" . into ( ) ) ;
93
+ log_record. add_attribute ( "testbool" , AnyValue :: Boolean ( true ) ) ;
94
+ logger. emit ( log_record) ;
99
95
} ) ;
100
96
101
97
let bytes = AnyValue :: Bytes ( vec ! [ 25u8 , 30u8 , 40u8 ] ) ;
102
98
log_benchmark_group ( c, "simple-log-with-bytes" , |logger| {
103
- logger. emit (
104
- LogRecord :: builder ( )
105
- . with_body ( "simple log" )
106
- . with_attribute ( "testbytes" , bytes. clone ( ) )
107
- . build ( ) ,
108
- )
99
+ let mut log_record = logger. create_log_record ( ) ;
100
+ log_record. set_body ( "simple log" . into ( ) ) ;
101
+ log_record. add_attribute ( "testbytes" , bytes. clone ( ) ) ;
102
+ logger. emit ( log_record) ;
109
103
} ) ;
110
104
111
105
let bytes = AnyValue :: Bytes ( vec ! [
@@ -117,22 +111,18 @@ fn criterion_benchmark(c: &mut Criterion) {
117
111
30u8 , 40u8 , 30u8 , 40u8 , 30u8 , 40u8 , 30u8 , 40u8 , 30u8 , 40u8 ,
118
112
] ) ;
119
113
log_benchmark_group ( c, "simple-log-with-a-lot-of-bytes" , |logger| {
120
- logger. emit (
121
- LogRecord :: builder ( )
122
- . with_body ( "simple log" )
123
- . with_attribute ( "testbytes" , bytes. clone ( ) )
124
- . build ( ) ,
125
- )
114
+ let mut log_record = logger. create_log_record ( ) ;
115
+ log_record. set_body ( "simple log" . into ( ) ) ;
116
+ log_record. add_attribute ( "testbytes" , bytes. clone ( ) ) ;
117
+ logger. emit ( log_record) ;
126
118
} ) ;
127
119
128
120
let vec_any_values = AnyValue :: ListAny ( vec ! [ AnyValue :: Int ( 25 ) , "test" . into( ) , true . into( ) ] ) ;
129
121
log_benchmark_group ( c, "simple-log-with-vec-any-value" , |logger| {
130
- logger. emit (
131
- LogRecord :: builder ( )
132
- . with_body ( "simple log" )
133
- . with_attribute ( "testvec" , vec_any_values. clone ( ) )
134
- . build ( ) ,
135
- )
122
+ let mut log_record = logger. create_log_record ( ) ;
123
+ log_record. set_body ( "simple log" . into ( ) ) ;
124
+ log_record. add_attribute ( "testvec" , vec_any_values. clone ( ) ) ;
125
+ logger. emit ( log_record) ;
136
126
} ) ;
137
127
138
128
let vec_any_values = AnyValue :: ListAny ( vec ! [ AnyValue :: Int ( 25 ) , "test" . into( ) , true . into( ) ] ) ;
@@ -143,12 +133,10 @@ fn criterion_benchmark(c: &mut Criterion) {
143
133
vec_any_values,
144
134
] ) ;
145
135
log_benchmark_group ( c, "simple-log-with-inner-vec-any-value" , |logger| {
146
- logger. emit (
147
- LogRecord :: builder ( )
148
- . with_body ( "simple log" )
149
- . with_attribute ( "testvec" , vec_any_values. clone ( ) )
150
- . build ( ) ,
151
- )
136
+ let mut log_record = logger. create_log_record ( ) ;
137
+ log_record. set_body ( "simple log" . into ( ) ) ;
138
+ log_record. add_attribute ( "testvec" , vec_any_values. clone ( ) ) ;
139
+ logger. emit ( log_record) ;
152
140
} ) ;
153
141
154
142
let map_any_values = AnyValue :: Map ( HashMap :: from ( [
@@ -157,12 +145,10 @@ fn criterion_benchmark(c: &mut Criterion) {
157
145
( "teststring" . into ( ) , "test" . into ( ) ) ,
158
146
] ) ) ;
159
147
log_benchmark_group ( c, "simple-log-with-map-any-value" , |logger| {
160
- logger. emit (
161
- LogRecord :: builder ( )
162
- . with_body ( "simple log" )
163
- . with_attribute ( "testmap" , map_any_values. clone ( ) )
164
- . build ( ) ,
165
- )
148
+ let mut log_record = logger. create_log_record ( ) ;
149
+ log_record. set_body ( "simple log" . into ( ) ) ;
150
+ log_record. add_attribute ( "testmap" , map_any_values. clone ( ) ) ;
151
+ logger. emit ( log_record) ;
166
152
} ) ;
167
153
168
154
let map_any_values = AnyValue :: Map ( HashMap :: from ( [
@@ -177,66 +163,60 @@ fn criterion_benchmark(c: &mut Criterion) {
177
163
( "testmap" . into ( ) , map_any_values) ,
178
164
] ) ) ;
179
165
log_benchmark_group ( c, "simple-log-with-inner-map-any-value" , |logger| {
180
- logger. emit (
181
- LogRecord :: builder ( )
182
- . with_body ( "simple log" )
183
- . with_attribute ( "testmap" , map_any_values. clone ( ) )
184
- . build ( ) ,
185
- )
166
+ let mut log_record = logger. create_log_record ( ) ;
167
+ log_record. set_body ( "simple log" . into ( ) ) ;
168
+ log_record. add_attribute ( "testmap" , map_any_values. clone ( ) ) ;
169
+ logger. emit ( log_record) ;
186
170
} ) ;
187
171
188
172
log_benchmark_group ( c, "long-log" , |logger| {
189
- logger. emit ( LogRecord :: builder ( ) . with_body ( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Gravida in fermentum et sollicitudin ac orci phasellus. Ullamcorper dignissim cras tincidunt lobortis feugiat vivamus at augue. Magna etiam tempor orci eu. Sed tempus urna et pharetra pharetra massa." ) . build ( ) )
173
+ let mut log_record = logger. create_log_record ( ) ;
174
+ log_record. set_body ( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Gravida in fermentum et sollicitudin ac orci phasellus. Ullamcorper dignissim cras tincidunt lobortis feugiat vivamus at augue. Magna etiam tempor orci eu. Sed tempus urna et pharetra pharetra massa." . into ( ) ) ;
175
+ logger. emit ( log_record) ;
190
176
} ) ;
191
177
192
178
let now = SystemTime :: now ( ) ;
193
179
log_benchmark_group ( c, "full-log" , |logger| {
194
- logger. emit (
195
- LogRecord :: builder ( )
196
- . with_body ( "full log" )
197
- . with_timestamp ( now)
198
- . with_observed_timestamp ( now)
199
- . with_severity_number ( Severity :: Warn )
200
- . with_severity_text ( Severity :: Warn . name ( ) )
201
- . build ( ) ,
202
- )
180
+ let mut log_record = logger. create_log_record ( ) ;
181
+ log_record. set_body ( "full log" . into ( ) ) ;
182
+ log_record. set_timestamp ( now) ;
183
+ log_record. set_observed_timestamp ( now) ;
184
+ log_record. set_severity_number ( Severity :: Warn ) ;
185
+ log_record. set_severity_text ( Severity :: Warn . name ( ) . into ( ) ) ;
186
+ logger. emit ( log_record) ;
203
187
} ) ;
204
188
205
189
log_benchmark_group ( c, "full-log-with-4-attributes" , |logger| {
206
- logger. emit (
207
- LogRecord :: builder ( )
208
- . with_body ( "full log" )
209
- . with_timestamp ( now)
210
- . with_observed_timestamp ( now)
211
- . with_severity_number ( Severity :: Warn )
212
- . with_severity_text ( Severity :: Warn . name ( ) )
213
- . with_attribute ( "name" , "my-event-name" )
214
- . with_attribute ( "event.id" , 20 )
215
- . with_attribute ( "user.name" , "otel" )
216
- . with_attribute ( "user.email" , "otel@opentelemetry.io" )
217
- . build ( ) ,
218
- )
190
+ let mut log_record = logger. create_log_record ( ) ;
191
+ log_record. set_body ( "full log" . into ( ) ) ;
192
+ log_record. set_timestamp ( now) ;
193
+ log_record. set_observed_timestamp ( now) ;
194
+ log_record. set_severity_number ( Severity :: Warn ) ;
195
+ log_record. set_severity_text ( Severity :: Warn . name ( ) . into ( ) ) ;
196
+ log_record. add_attribute ( "name" , "my-event-name" ) ;
197
+ log_record. add_attribute ( "event.id" , 20 ) ;
198
+ log_record. add_attribute ( "user.name" , "otel" ) ;
199
+ log_record. add_attribute ( "user.email" , "otel@opentelemetry.io" ) ;
200
+ logger. emit ( log_record) ;
219
201
} ) ;
220
202
221
203
log_benchmark_group ( c, "full-log-with-9-attributes" , |logger| {
222
- logger. emit (
223
- LogRecord :: builder ( )
224
- . with_body ( "full log" )
225
- . with_timestamp ( now)
226
- . with_observed_timestamp ( now)
227
- . with_severity_number ( Severity :: Warn )
228
- . with_severity_text ( Severity :: Warn . name ( ) )
229
- . with_attribute ( "name" , "my-event-name" )
230
- . with_attribute ( "event.id" , 20 )
231
- . with_attribute ( "user.name" , "otel" )
232
- . with_attribute ( "user.email" , "otel@opentelemetry.io" )
233
- . with_attribute ( "code.filename" , "log.rs" )
234
- . with_attribute ( "code.filepath" , "opentelemetry_sdk/benches/log.rs" )
235
- . with_attribute ( "code.lineno" , 96 )
236
- . with_attribute ( "code.namespace" , "opentelemetry_sdk::benches::log" )
237
- . with_attribute ( "log.target" , "opentelemetry_sdk::benches::log" )
238
- . build ( ) ,
239
- )
204
+ let mut log_record = logger. create_log_record ( ) ;
205
+ log_record. set_body ( "full log" . into ( ) ) ;
206
+ log_record. set_timestamp ( now) ;
207
+ log_record. set_observed_timestamp ( now) ;
208
+ log_record. set_severity_number ( Severity :: Warn ) ;
209
+ log_record. set_severity_text ( Severity :: Warn . name ( ) . into ( ) ) ;
210
+ log_record. add_attribute ( "name" , "my-event-name" ) ;
211
+ log_record. add_attribute ( "event.id" , 20 ) ;
212
+ log_record. add_attribute ( "user.name" , "otel" ) ;
213
+ log_record. add_attribute ( "user.email" , "otel@opentelemetry.io" ) ;
214
+ log_record. add_attribute ( "code.filename" , "log.rs" ) ;
215
+ log_record. add_attribute ( "code.filepath" , "opentelemetry_sdk/benches/log.rs" ) ;
216
+ log_record. add_attribute ( "code.lineno" , 96 ) ;
217
+ log_record. add_attribute ( "code.namespace" , "opentelemetry_sdk::benches::log" ) ;
218
+ log_record. add_attribute ( "log.target" , "opentelemetry_sdk::benches::log" ) ;
219
+ logger. emit ( log_record) ;
240
220
} ) ;
241
221
242
222
let attributes: Vec < ( Key , AnyValue ) > = vec ! [
@@ -260,16 +240,14 @@ fn criterion_benchmark(c: &mut Criterion) {
260
240
) ,
261
241
] ;
262
242
log_benchmark_group ( c, "full-log-with-attributes" , |logger| {
263
- logger. emit (
264
- LogRecord :: builder ( )
265
- . with_body ( "full log" )
266
- . with_timestamp ( now)
267
- . with_observed_timestamp ( now)
268
- . with_severity_number ( Severity :: Warn )
269
- . with_severity_text ( Severity :: Warn . name ( ) )
270
- . with_attributes ( attributes. clone ( ) )
271
- . build ( ) ,
272
- )
243
+ let mut log_record = logger. create_log_record ( ) ;
244
+ log_record. set_body ( "full log" . into ( ) ) ;
245
+ log_record. set_timestamp ( now) ;
246
+ log_record. set_observed_timestamp ( now) ;
247
+ log_record. set_severity_number ( Severity :: Warn ) ;
248
+ log_record. set_severity_text ( Severity :: Warn . name ( ) . into ( ) ) ;
249
+ log_record. add_attributes ( attributes. clone ( ) ) ;
250
+ logger. emit ( log_record) ;
273
251
} ) ;
274
252
}
275
253
0 commit comments