diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java index 98b06f4700e..67133aa1125 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java @@ -7,17 +7,20 @@ import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNonNull; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLoggerConfigModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLoggerConfiguratorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLoggerMatcherAndConfigModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel; +import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel.SeverityNumber; import io.opentelemetry.sdk.internal.ScopeConfigurator; import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder; import io.opentelemetry.sdk.logs.LogLimits; import io.opentelemetry.sdk.logs.SdkLoggerProvider; import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder; import io.opentelemetry.sdk.logs.internal.LoggerConfig; +import io.opentelemetry.sdk.logs.internal.LoggerConfigBuilder; import io.opentelemetry.sdk.logs.internal.SdkLoggerProviderUtil; import java.util.List; @@ -97,10 +100,72 @@ private static class LoggerConfigFactory @Override public LoggerConfig create( ExperimentalLoggerConfigModel model, DeclarativeConfigContext context) { + LoggerConfigBuilder configBuilder = LoggerConfig.builder(); if (model.getDisabled() != null && model.getDisabled()) { - return LoggerConfig.disabled(); + configBuilder.setEnabled(false); } - return LoggerConfig.defaultConfig(); + if (model.getTraceBased() != null && model.getTraceBased()) { + configBuilder.setTraceBased(true); + } + if (model.getMinimumSeverity() != null) { + configBuilder.setMinimumSeverity(severityNumberToSeverity(model.getMinimumSeverity())); + } + return configBuilder.build(); + } + } + + // Visible for testing + static Severity severityNumberToSeverity(SeverityNumber model) { + switch (model) { + case TRACE: + return Severity.TRACE; + case TRACE_2: + return Severity.TRACE2; + case TRACE_3: + return Severity.TRACE3; + case TRACE_4: + return Severity.TRACE4; + case DEBUG: + return Severity.DEBUG; + case DEBUG_2: + return Severity.DEBUG2; + case DEBUG_3: + return Severity.DEBUG3; + case DEBUG_4: + return Severity.DEBUG4; + case INFO: + return Severity.INFO; + case INFO_2: + return Severity.INFO2; + case INFO_3: + return Severity.INFO3; + case INFO_4: + return Severity.INFO4; + case WARN: + return Severity.WARN; + case WARN_2: + return Severity.WARN2; + case WARN_3: + return Severity.WARN3; + case WARN_4: + return Severity.WARN4; + case ERROR: + return Severity.ERROR; + case ERROR_2: + return Severity.ERROR2; + case ERROR_3: + return Severity.ERROR3; + case ERROR_4: + return Severity.ERROR4; + case FATAL: + return Severity.FATAL; + case FATAL_2: + return Severity.FATAL2; + case FATAL_3: + return Severity.FATAL3; + case FATAL_4: + return Severity.FATAL4; } + throw new IllegalArgumentException("Unrecognized severity number: " + model); } } diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java index 65761fd5c9c..8555caa8c91 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java @@ -8,6 +8,7 @@ import static io.opentelemetry.sdk.logs.internal.SdkLoggerProviderUtil.setLoggerConfigurator; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; @@ -20,6 +21,7 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimitsModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel; +import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel.SeverityNumber; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpHttpExporterModel; import io.opentelemetry.sdk.internal.ScopeConfigurator; import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder; @@ -92,13 +94,20 @@ private static Stream createArguments() { .withName("foo") .withConfig( new ExperimentalLoggerConfigModel() - .withDisabled(false)))))), + .withDisabled(false) + .withTraceBased(true) + .withMinimumSeverity(SeverityNumber.INFO)))))), setLoggerConfigurator( SdkLoggerProvider.builder(), ScopeConfigurator.builder() .setDefault(LoggerConfig.disabled()) .addCondition( - ScopeConfiguratorBuilder.nameMatchesGlob("foo"), LoggerConfig.enabled()) + ScopeConfiguratorBuilder.nameMatchesGlob("foo"), + LoggerConfig.builder() + .setEnabled(true) + .setTraceBased(true) + .setMinimumSeverity(Severity.INFO) + .build()) .build()) .setLogLimits( () -> @@ -112,4 +121,38 @@ private static Stream createArguments() { .build()) .build())); } + + @ParameterizedTest + @MethodSource("severityNumberArguments") + void severityNumber(SeverityNumber model, Severity expectedSeverity) { + assertThat(LoggerProviderFactory.severityNumberToSeverity(model)).isEqualTo(expectedSeverity); + } + + private static Stream severityNumberArguments() { + return Stream.of( + Arguments.of(SeverityNumber.TRACE, Severity.TRACE), + Arguments.of(SeverityNumber.TRACE_2, Severity.TRACE2), + Arguments.of(SeverityNumber.TRACE_3, Severity.TRACE3), + Arguments.of(SeverityNumber.TRACE_4, Severity.TRACE4), + Arguments.of(SeverityNumber.DEBUG, Severity.DEBUG), + Arguments.of(SeverityNumber.DEBUG_2, Severity.DEBUG2), + Arguments.of(SeverityNumber.DEBUG_3, Severity.DEBUG3), + Arguments.of(SeverityNumber.DEBUG_4, Severity.DEBUG4), + Arguments.of(SeverityNumber.INFO, Severity.INFO), + Arguments.of(SeverityNumber.INFO_2, Severity.INFO2), + Arguments.of(SeverityNumber.INFO_3, Severity.INFO3), + Arguments.of(SeverityNumber.INFO_4, Severity.INFO4), + Arguments.of(SeverityNumber.WARN, Severity.WARN), + Arguments.of(SeverityNumber.WARN_2, Severity.WARN2), + Arguments.of(SeverityNumber.WARN_3, Severity.WARN3), + Arguments.of(SeverityNumber.WARN_4, Severity.WARN4), + Arguments.of(SeverityNumber.ERROR, Severity.ERROR), + Arguments.of(SeverityNumber.ERROR_2, Severity.ERROR2), + Arguments.of(SeverityNumber.ERROR_3, Severity.ERROR3), + Arguments.of(SeverityNumber.ERROR_4, Severity.ERROR4), + Arguments.of(SeverityNumber.FATAL, Severity.FATAL), + Arguments.of(SeverityNumber.FATAL_2, Severity.FATAL2), + Arguments.of(SeverityNumber.FATAL_3, Severity.FATAL3), + Arguments.of(SeverityNumber.FATAL_4, Severity.FATAL4)); + } }