Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#pragma once

#include "opentelemetry/sdk/configuration/severity_number.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
Expand All @@ -17,6 +18,8 @@ class LoggerConfigConfiguration
{
public:
bool enabled{true};
SeverityNumber minimum_severity{SeverityNumber::trace};
bool trace_based{false};
};

} // namespace configuration
Expand Down
6 changes: 6 additions & 0 deletions sdk/src/configuration/configuration_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
105 changes: 105 additions & 0 deletions sdk/test/configuration/yaml_logs_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -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);
}
Loading