diff --git a/CHANGELOG.md b/CHANGELOG.md index c257958b9b..1607ae7d0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,10 @@ Increment the: * [CODE HEALTH] Move func_grpc_main classes into anonymous namespace [#4129](https://github.com/open-telemetry/opentelemetry-cpp/pull/4129) +* [CONFIGURATION] Implement missing minimum_severity and trace_based for + LoggerConfig declarative configuration + [#4131](https://github.com/open-telemetry/opentelemetry-cpp/pull/4131) + ## [1.27.0] 2026-05-13 * [RELEASE] Bump main branch to 1.27.0-dev diff --git a/sdk/include/opentelemetry/sdk/configuration/logger_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/logger_config_configuration.h index f1e57c3b1f..736699754f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_config_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_config_configuration.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/severity_number.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -17,6 +18,8 @@ class LoggerConfigConfiguration { public: bool enabled{true}; + SeverityNumber minimum_severity{SeverityNumber::trace}; + bool trace_based{false}; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 7b3a6b93fe..116bf28d4e 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -624,6 +624,12 @@ LoggerConfigConfiguration ConfigurationParser::ParseLoggerConfigConfiguration( { LoggerConfigConfiguration model; model.enabled = node->GetBoolean("enabled", true); + + const std::string minimum_severity_str = node->GetString("minimum_severity", "trace"); + model.minimum_severity = ParseSeverityNumber(node, minimum_severity_str); + + model.trace_based = node->GetBoolean("trace_based", false); + return model; } diff --git a/sdk/test/configuration/yaml_logs_test.cc b/sdk/test/configuration/yaml_logs_test.cc index dc783685e2..f885f85434 100644 --- a/sdk/test/configuration/yaml_logs_test.cc +++ b/sdk/test/configuration/yaml_logs_test.cc @@ -21,6 +21,7 @@ #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/severity_number.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" @@ -590,3 +591,107 @@ file_format: "1.0-logs" ASSERT_EQ(configurator->loggers[0].name, "noisy.library"); ASSERT_EQ(configurator->loggers[0].config.enabled, false); } + +TEST(YamlLogs, logger_config_with_minimum_severity) +{ + std::string yaml = R"YAML( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: + logger_configurator/development: + default_config: + enabled: true + minimum_severity: warn + trace_based: false + loggers: + - name: my.logger + config: + enabled: true + minimum_severity: error + trace_based: true +)YAML"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->logger_configurator, nullptr); + + auto &configurator = config->logger_provider->logger_configurator; + ASSERT_EQ(configurator->default_config.enabled, true); + ASSERT_EQ(configurator->default_config.minimum_severity, + opentelemetry::sdk::configuration::SeverityNumber::warn); + ASSERT_EQ(configurator->default_config.trace_based, false); + ASSERT_EQ(configurator->loggers.size(), 1); + + ASSERT_EQ(configurator->loggers[0].name, "my.logger"); + ASSERT_EQ(configurator->loggers[0].config.enabled, true); + ASSERT_EQ(configurator->loggers[0].config.minimum_severity, + opentelemetry::sdk::configuration::SeverityNumber::error); + ASSERT_EQ(configurator->loggers[0].config.trace_based, true); +} + +TEST(YamlLogs, logger_config_with_default_minimum_severity) +{ + std::string yaml = R"YAML( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: + logger_configurator/development: + default_config: + enabled: true + loggers: + - name: my.logger + config: + enabled: false +)YAML"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->logger_configurator, nullptr); + + auto &configurator = config->logger_provider->logger_configurator; + ASSERT_EQ(configurator->default_config.enabled, true); + ASSERT_EQ(configurator->default_config.minimum_severity, + opentelemetry::sdk::configuration::SeverityNumber::trace); + ASSERT_EQ(configurator->default_config.trace_based, false); + + ASSERT_EQ(configurator->loggers[0].config.enabled, false); + ASSERT_EQ(configurator->loggers[0].config.minimum_severity, + opentelemetry::sdk::configuration::SeverityNumber::trace); + ASSERT_EQ(configurator->loggers[0].config.trace_based, false); +} + +TEST(YamlLogs, logger_config_trace_based_true) +{ + std::string yaml = R"YAML( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: + logger_configurator/development: + default_config: + enabled: true + minimum_severity: info + trace_based: true +)YAML"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->logger_configurator, nullptr); + + auto &configurator = config->logger_provider->logger_configurator; + ASSERT_EQ(configurator->default_config.enabled, true); + ASSERT_EQ(configurator->default_config.minimum_severity, + opentelemetry::sdk::configuration::SeverityNumber::info); + ASSERT_EQ(configurator->default_config.trace_based, true); +}