File tree Expand file tree Collapse file tree 2 files changed +37
-1
lines changed
main/java/io/opentelemetry/sdk/logs
test/java/io/opentelemetry/sdk/logs Expand file tree Collapse file tree 2 files changed +37
-1
lines changed Original file line number Diff line number Diff line change 99import io .opentelemetry .api .logs .Logger ;
1010import io .opentelemetry .context .Context ;
1111import io .opentelemetry .sdk .common .CompletableResultCode ;
12+ import io .opentelemetry .sdk .logs .export .BatchLogRecordProcessor ;
1213import java .io .Closeable ;
1314import java .util .ArrayList ;
1415import java .util .Arrays ;
@@ -39,15 +40,26 @@ static LogRecordProcessor composite(LogRecordProcessor... processors) {
3940 */
4041 static LogRecordProcessor composite (Iterable <LogRecordProcessor > processors ) {
4142 List <LogRecordProcessor > processorList = new ArrayList <>();
43+ BatchLogRecordProcessor batchProcessor = null ;
4244 for (LogRecordProcessor processor : processors ) {
43- processorList .add (processor );
45+ if (!BatchLogRecordProcessor .class .equals (processor .getClass ())) {
46+ processorList .add (processor );
47+ } else {
48+ batchProcessor = (BatchLogRecordProcessor ) processor ;
49+ }
4450 }
51+ if (batchProcessor != null ) {
52+ processorList .add (batchProcessor );
53+ }
54+
4555 if (processorList .isEmpty ()) {
4656 return NoopLogRecordProcessor .getInstance ();
4757 }
58+
4859 if (processorList .size () == 1 ) {
4960 return processorList .get (0 );
5061 }
62+
5163 return MultiLogRecordProcessor .create (processorList );
5264 }
5365
Original file line number Diff line number Diff line change 2929import io .opentelemetry .sdk .common .CompletableResultCode ;
3030import io .opentelemetry .sdk .common .InstrumentationScopeInfo ;
3131import io .opentelemetry .sdk .logs .data .LogRecordData ;
32+ import io .opentelemetry .sdk .logs .export .BatchLogRecordProcessor ;
3233import io .opentelemetry .sdk .resources .Resource ;
3334import java .util .Optional ;
3435import java .util .concurrent .TimeUnit ;
@@ -142,6 +143,29 @@ void builder_multipleProcessors() {
142143 });
143144 }
144145
146+ @ Test
147+ void builder_multipleProcessorsWithBatchProcessor () {
148+ assertThat (
149+ SdkLoggerProvider .builder ()
150+ .addLogRecordProcessor (mock (BatchLogRecordProcessor .class ))
151+ .addLogRecordProcessor (logRecordProcessor )
152+ .addLogRecordProcessor (logRecordProcessor )
153+ .build ())
154+ .extracting ("sharedState" , as (InstanceOfAssertFactories .type (LoggerSharedState .class )))
155+ .extracting (LoggerSharedState ::getLogRecordProcessor )
156+ .satisfies (
157+ activeLogRecordProcessor -> {
158+ assertThat (activeLogRecordProcessor ).isInstanceOf (MultiLogRecordProcessor .class );
159+ assertThat (activeLogRecordProcessor )
160+ .extracting (
161+ "logRecordProcessors" ,
162+ as (InstanceOfAssertFactories .list (LogRecordProcessor .class )))
163+ .hasSize (3 )
164+ .last ()
165+ .isInstanceOf (BatchLogRecordProcessor .class );
166+ });
167+ }
168+
145169 @ Test
146170 void loggerBuilder_SameName () {
147171 assertThat (sdkLoggerProvider .loggerBuilder ("test" ).build ())
You can’t perform that action at this time.
0 commit comments