forked from open-telemetry/opentelemetry-java
-
Notifications
You must be signed in to change notification settings - Fork 1
/
LoggerProviderConfiguration.java
82 lines (65 loc) · 2.8 KB
/
LoggerProviderConfiguration.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.autoconfigure;
import static io.opentelemetry.sdk.autoconfigure.LogExporterConfiguration.configureLogExporters;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.logs.LogLimits;
import io.opentelemetry.sdk.logs.LogLimitsBuilder;
import io.opentelemetry.sdk.logs.LogProcessor;
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
import io.opentelemetry.sdk.logs.export.BatchLogProcessor;
import io.opentelemetry.sdk.logs.export.LogExporter;
import io.opentelemetry.sdk.logs.export.SimpleLogProcessor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
final class LoggerProviderConfiguration {
static void configureLoggerProvider(
SdkLoggerProviderBuilder loggerProviderBuilder,
ConfigProperties config,
ClassLoader serviceClassLoader,
MeterProvider meterProvider,
BiFunction<? super LogExporter, ConfigProperties, ? extends LogExporter>
logExporterCustomizer) {
loggerProviderBuilder.setLogLimits(() -> configureLogLimits(config));
Map<String, LogExporter> exportersByName =
configureLogExporters(config, serviceClassLoader, meterProvider, logExporterCustomizer);
configureLogProcessors(exportersByName, meterProvider)
.forEach(loggerProviderBuilder::addLogProcessor);
}
// Visible for testing
static List<LogProcessor> configureLogProcessors(
Map<String, LogExporter> exportersByName, MeterProvider meterProvider) {
Map<String, LogExporter> exportersByNameCopy = new HashMap<>(exportersByName);
List<LogProcessor> logProcessors = new ArrayList<>();
LogExporter exporter = exportersByNameCopy.remove("logging");
if (exporter != null) {
logProcessors.add(SimpleLogProcessor.create(exporter));
}
if (!exportersByNameCopy.isEmpty()) {
LogExporter compositeLogExporter = LogExporter.composite(exportersByNameCopy.values());
logProcessors.add(
BatchLogProcessor.builder(compositeLogExporter).setMeterProvider(meterProvider).build());
}
return logProcessors;
}
// Visible for testing
static LogLimits configureLogLimits(ConfigProperties config) {
LogLimitsBuilder builder = LogLimits.builder();
Integer maxAttrLength = config.getInt("otel.attribute.value.length.limit");
if (maxAttrLength != null) {
builder.setMaxAttributeValueLength(maxAttrLength);
}
Integer maxAttrs = config.getInt("otel.attribute.count.limit");
if (maxAttrs != null) {
builder.setMaxNumberOfAttributes(maxAttrs);
}
return builder.build();
}
private LoggerProviderConfiguration() {}
}