Skip to content

Commit af563f1

Browse files
committed
wip: add SimpleLogRecordProcessor
1 parent d5d6f5a commit af563f1

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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 'dart:async';
5+
6+
import 'package:logging/logging.dart' as logging;
7+
import 'package:meta/meta.dart';
8+
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
9+
10+
class SimpleLogRecordProcessor implements sdk.LogRecordProcessor {
11+
final logger = logging.Logger('opentelemetry.sdk.logs.simplelogrecordprocessor');
12+
final sdk.LogRecordExporter exporter;
13+
bool _shutDownOnce = false;
14+
15+
@visibleForTesting
16+
final exportsCompletion = <Completer>[];
17+
18+
SimpleLogRecordProcessor({required this.exporter});
19+
20+
bool _isForcedFlushed = false;
21+
22+
@override
23+
void onEmit(sdk.ReadableLogRecord logRecord) {
24+
if (_shutDownOnce) return;
25+
final completer = Completer();
26+
exportsCompletion.add(completer);
27+
exporter.export([logRecord]).then((result) {
28+
if (result.code != sdk.ExportResultCode.success) {
29+
logger.shout('SimpleLogRecordProcessor: log record export failed', result.error, result.stackTrace);
30+
}
31+
}).whenComplete(() {
32+
completer.complete();
33+
if (_isForcedFlushed) return;
34+
exportsCompletion.remove(completer);
35+
});
36+
}
37+
38+
@override
39+
Future<void> forceFlush() async {
40+
_isForcedFlushed = true;
41+
await Future.forEach(exportsCompletion, (completer) => completer.future);
42+
}
43+
44+
@override
45+
Future<void> shutdown() async {
46+
_shutDownOnce = true;
47+
await exporter.shutdown();
48+
}
49+
}

0 commit comments

Comments
 (0)