10
10
import io .opentelemetry .api .trace .propagation .W3CTraceContextPropagator ;
11
11
import io .opentelemetry .context .propagation .ContextPropagators ;
12
12
import io .opentelemetry .sdk .OpenTelemetrySdk ;
13
+ import io .opentelemetry .sdk .logs .SdkLoggerProvider ;
14
+ import io .opentelemetry .sdk .logs .data .LogRecordData ;
15
+ import io .opentelemetry .sdk .logs .export .SimpleLogRecordProcessor ;
13
16
import io .opentelemetry .sdk .metrics .SdkMeterProvider ;
14
17
import io .opentelemetry .sdk .metrics .data .AggregationTemporality ;
15
18
import io .opentelemetry .sdk .metrics .data .MetricData ;
16
19
import io .opentelemetry .sdk .metrics .internal .SdkMeterProviderUtil ;
20
+ import io .opentelemetry .sdk .testing .exporter .InMemoryLogRecordExporter ;
17
21
import io .opentelemetry .sdk .testing .exporter .InMemoryMetricReader ;
18
22
import io .opentelemetry .sdk .testing .exporter .InMemorySpanExporter ;
19
23
import io .opentelemetry .sdk .trace .SdkTracerProvider ;
@@ -71,27 +75,38 @@ public static OpenTelemetryRule create() {
71
75
SdkMeterProvider meterProvider =
72
76
SdkMeterProvider .builder ().registerMetricReader (metricReader ).build ();
73
77
78
+ InMemoryLogRecordExporter logRecordExporter = InMemoryLogRecordExporter .create ();
79
+
80
+ SdkLoggerProvider loggerProvider =
81
+ SdkLoggerProvider .builder ()
82
+ .addLogRecordProcessor (SimpleLogRecordProcessor .create (logRecordExporter ))
83
+ .build ();
84
+
74
85
OpenTelemetrySdk openTelemetry =
75
86
OpenTelemetrySdk .builder ()
76
87
.setPropagators (ContextPropagators .create (W3CTraceContextPropagator .getInstance ()))
77
88
.setTracerProvider (tracerProvider )
78
89
.setMeterProvider (meterProvider )
90
+ .setLoggerProvider (loggerProvider )
79
91
.build ();
80
92
81
- return new OpenTelemetryRule (openTelemetry , spanExporter , metricReader );
93
+ return new OpenTelemetryRule (openTelemetry , spanExporter , metricReader , logRecordExporter );
82
94
}
83
95
84
96
private final OpenTelemetrySdk openTelemetry ;
85
97
private final InMemorySpanExporter spanExporter ;
86
98
private final InMemoryMetricReader metricReader ;
99
+ private final InMemoryLogRecordExporter logRecordExporter ;
87
100
88
101
private OpenTelemetryRule (
89
102
OpenTelemetrySdk openTelemetry ,
90
103
InMemorySpanExporter spanExporter ,
91
- InMemoryMetricReader metricReader ) {
104
+ InMemoryMetricReader metricReader ,
105
+ InMemoryLogRecordExporter logRecordExporter ) {
92
106
this .openTelemetry = openTelemetry ;
93
107
this .spanExporter = spanExporter ;
94
108
this .metricReader = metricReader ;
109
+ this .logRecordExporter = logRecordExporter ;
95
110
}
96
111
97
112
/** Returns the {@link OpenTelemetrySdk} created by this extension. */
@@ -113,6 +128,15 @@ public List<MetricData> getMetrics() {
113
128
return new ArrayList <>(metricReader .collectAllMetrics ());
114
129
}
115
130
131
+ /**
132
+ * Returns all the exported {@link LogRecordData} so far.
133
+ *
134
+ * @since 1.32.0
135
+ */
136
+ public List <LogRecordData > getLogRecords () {
137
+ return new ArrayList <>(logRecordExporter .getFinishedLogRecordItems ());
138
+ }
139
+
116
140
/**
117
141
* Clears the collected exported {@link SpanData}. Consider making your test smaller instead of
118
142
* manually clearing state using this method.
@@ -130,12 +154,23 @@ public void clearMetrics() {
130
154
SdkMeterProviderUtil .resetForTest (openTelemetry .getSdkMeterProvider ());
131
155
}
132
156
157
+ /**
158
+ * Clears the collected exported {@link LogRecordData}. Consider making your test smaller instead
159
+ * of manually clearing state using this method.
160
+ *
161
+ * @since 1.32.0
162
+ */
163
+ public void clearLogRecords () {
164
+ logRecordExporter .reset ();
165
+ }
166
+
133
167
@ Override
134
168
protected void before () {
135
169
GlobalOpenTelemetry .resetForTest ();
136
170
GlobalOpenTelemetry .set (openTelemetry );
137
171
clearSpans ();
138
172
clearMetrics ();
173
+ clearLogRecords ();
139
174
}
140
175
141
176
@ Override
0 commit comments