Skip to content

Commit c71f1b7

Browse files
committed
wip: add InMemoryLogRecordExporter
1 parent 30d677e commit c71f1b7

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

lib/src/experimental_sdk.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export 'sdk/logs/processors/log_record_processor.dart' show LogRecordProcessor;
1414
export 'sdk/logs/processors/noop_log_processor.dart' show NoopLogRecordProcessor;
1515
export 'sdk/logs/processors/batch_log_record_processor.dart' show BatchLogRecordProcessor;
1616
export 'sdk/logs/exporters/console_log_record_exporter.dart' show ConsoleLogRecordExporter;
17+
export 'sdk/logs/exporters/inmemory_log_record_exporter.dart' show InMemoryLogRecordExporter;
1718
export 'sdk/logs/exporters/log_record_exporter.dart' show LogRecordExporter;
1819
export 'sdk/logs/log_record_limit.dart' show LogRecordLimits;
1920
export 'sdk/metrics/counter.dart' show Counter;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2021-2022 Workiva.
2+
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
3+
4+
import 'package:meta/meta.dart';
5+
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
6+
7+
/// This class can be used for testing purposes. It stores the exported LogRecords
8+
/// in a list in memory that can be retrieved using the `getFinishedLogRecords()`
9+
/// method.
10+
class InMemoryLogRecordExporter implements sdk.LogRecordExporter {
11+
var _finishedLogRecords = <sdk.ReadableLogRecord>[];
12+
13+
/// Indicates if the exporter has been "shutdown."
14+
/// When false, exported log records will not be stored in-memory.
15+
@protected
16+
bool _stopped = false;
17+
18+
@override
19+
Future<sdk.ExportResult> export(List<sdk.ReadableLogRecord> logs) async {
20+
if (_stopped) {
21+
return sdk.ExportResult(
22+
code: sdk.ExportResultCode.failed,
23+
error: Exception('Exporter has been stopped'),
24+
stackTrace: StackTrace.current,
25+
);
26+
}
27+
_finishedLogRecords.addAll(logs);
28+
29+
return sdk.ExportResult(code: sdk.ExportResultCode.success);
30+
}
31+
32+
@override
33+
Future<void> shutdown() async {
34+
_stopped = true;
35+
reset();
36+
}
37+
38+
List<sdk.ReadableLogRecord> get finishedLogRecords => List.unmodifiable(_finishedLogRecords);
39+
40+
void reset() {
41+
_finishedLogRecords = <sdk.ReadableLogRecord>[];
42+
}
43+
}

0 commit comments

Comments
 (0)