forked from open-telemetry/opentelemetry-java
-
Notifications
You must be signed in to change notification settings - Fork 1
/
SdkLoggerProviderBuilder.java
98 lines (87 loc) · 3.17 KB
/
SdkLoggerProviderBuilder.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.logs;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.logs.LogRecordBuilder;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.Clock;
import io.opentelemetry.sdk.logs.data.LogRecordData;
import io.opentelemetry.sdk.resources.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
/** Builder class for {@link SdkLoggerProvider} instances. */
public final class SdkLoggerProviderBuilder {
private final List<LogRecordProcessor> logRecordProcessors = new ArrayList<>();
private Resource resource = Resource.getDefault();
private Supplier<LogLimits> logLimitsSupplier = LogLimits::getDefault;
private Clock clock = Clock.getDefault();
SdkLoggerProviderBuilder() {}
/**
* Assign a {@link Resource} to be attached to all {@link LogRecordData} created by {@link
* Logger}s obtained from the {@link SdkLoggerProvider}.
*
* @param resource the resource
* @return this
*/
public SdkLoggerProviderBuilder setResource(Resource resource) {
requireNonNull(resource, "resource");
this.resource = resource;
return this;
}
/**
* Assign a {@link Supplier} of {@link LogLimits}. {@link LogLimits} will be retrieved each time a
* {@link Logger#logRecordBuilder()} is called.
*
* <p>The {@code logLimitsSupplier} must be thread-safe and return immediately (no remote calls,
* as contention free as possible).
*
* @param logLimitsSupplier the supplier that will be used to retrieve the {@link LogLimits} for
* every {@link LogRecordBuilder}.
* @return this
*/
public SdkLoggerProviderBuilder setLogLimits(Supplier<LogLimits> logLimitsSupplier) {
requireNonNull(logLimitsSupplier, "logLimitsSupplier");
this.logLimitsSupplier = logLimitsSupplier;
return this;
}
/**
* Add a log processor. {@link LogRecordProcessor#onEmit(Context, ReadWriteLogRecord)} will be
* called each time a log is emitted by {@link Logger} instances obtained from the {@link
* SdkLoggerProvider}.
*
* @param processor the log processor
* @return this
*/
public SdkLoggerProviderBuilder addLogRecordProcessor(LogRecordProcessor processor) {
requireNonNull(processor, "processor");
logRecordProcessors.add(processor);
return this;
}
/**
* Assign a {@link Clock}. The {@link Clock} may be used to determine "now" in the event that the
* epoch millis are not set directly.
*
* <p>The {@code clock} must be thread-safe and return immediately (no remote calls, as contention
* free as possible).
*
* @param clock The clock to use for all temporal needs.
* @return this
*/
public SdkLoggerProviderBuilder setClock(Clock clock) {
requireNonNull(clock, "clock");
this.clock = clock;
return this;
}
/**
* Create a {@link SdkLoggerProvider} instance.
*
* @return an instance configured with the provided options
*/
public SdkLoggerProvider build() {
return new SdkLoggerProvider(resource, logLimitsSupplier, logRecordProcessors, clock);
}
}