Skip to content

Commit 712e1a3

Browse files
committed
update SDK configuration to utilize logger configurator
1 parent b5ec117 commit 712e1a3

2 files changed

Lines changed: 42 additions & 5 deletions

File tree

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/__init__.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
LoggingHandler,
4343
LogRecordProcessor,
4444
)
45+
from opentelemetry.sdk._logs._internal import LoggerConfiguratorT
4546
from opentelemetry.sdk._logs.export import (
4647
BatchLogRecordProcessor,
4748
LogRecordExporter,
@@ -52,6 +53,7 @@
5253
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL,
5354
OTEL_EXPORTER_OTLP_PROTOCOL,
5455
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL,
56+
OTEL_PYTHON_LOGGER_CONFIGURATOR,
5557
OTEL_PYTHON_METER_CONFIGURATOR,
5658
OTEL_PYTHON_TRACER_CONFIGURATOR,
5759
OTEL_TRACES_SAMPLER,
@@ -177,6 +179,10 @@ def _get_meter_configurator() -> str | None:
177179
return environ.get(OTEL_PYTHON_METER_CONFIGURATOR, None)
178180

179181

182+
def _get_logger_configurator() -> str | None:
183+
return environ.get(OTEL_PYTHON_LOGGER_CONFIGURATOR, None)
184+
185+
180186
def _get_exporter_entry_point(
181187
exporter_name: str, signal_type: Literal["traces", "metrics", "logs"]
182188
):
@@ -305,8 +311,11 @@ def _init_logging(
305311
log_record_processors: Sequence[LogRecordProcessor] | None = None,
306312
export_log_record_processor: _ConfigurationExporterLogRecordProcessorT
307313
| None = None,
314+
logger_configurator: LoggerConfiguratorT | None = None,
308315
):
309-
provider = LoggerProvider(resource=resource)
316+
provider = LoggerProvider(
317+
resource=resource, logger_configurator=logger_configurator
318+
)
310319
set_logger_provider(provider)
311320

312321
exporter_args_map = exporter_args_map or {}
@@ -377,6 +386,27 @@ def overwritten_config_fn(*args, **kwargs):
377386
logging.basicConfig = wrapper(logging.basicConfig)
378387

379388

389+
def _import_logger_configurator(
390+
logger_configurator_name: str | None,
391+
) -> LoggerConfiguratorT | None:
392+
if not logger_configurator_name:
393+
return None
394+
395+
try:
396+
_, logger_configurator_impl = _import_config_components(
397+
[logger_configurator_name.strip()],
398+
"_opentelemetry_logger_configurator",
399+
)[0]
400+
except Exception as exc: # pylint: disable=broad-exception-caught
401+
_logger.warning(
402+
"Using default logger configurator. Failed to load logger configurator, %s: %s",
403+
logger_configurator_name,
404+
exc,
405+
)
406+
return None
407+
return logger_configurator_impl
408+
409+
380410
def _import_tracer_configurator(
381411
tracer_configurator_name: str | None,
382412
) -> _TracerConfiguratorT | None:
@@ -540,6 +570,7 @@ def _initialize_components(
540570
| None = None,
541571
tracer_configurator: _TracerConfiguratorT | None = None,
542572
meter_configurator: _MeterConfiguratorT | None = None,
573+
logger_configurator: LoggerConfiguratorT | None = None,
543574
):
544575
# pylint: disable=too-many-locals
545576
if trace_exporter_names is None:
@@ -576,6 +607,11 @@ def _initialize_components(
576607
meter_configurator = _import_meter_configurator(
577608
meter_configurator_name
578609
)
610+
if logger_configurator is None:
611+
logger_configurator_name = _get_logger_configurator()
612+
logger_configurator = _import_logger_configurator(
613+
logger_configurator_name
614+
)
579615

580616
# if env var OTEL_RESOURCE_ATTRIBUTES is given, it will read the service_name
581617
# from the env variable else defaults to "unknown_service"
@@ -613,6 +649,7 @@ def _initialize_components(
613649
exporter_args_map=exporter_args_map,
614650
log_record_processors=log_record_processors,
615651
export_log_record_processor=export_log_record_processor,
652+
logger_configurator=logger_configurator,
616653
)
617654

618655

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -778,10 +778,10 @@ def __init__(
778778
self._rules = rules
779779
self._default_config = default_config
780780

781-
def __call__(self, meter_scope: InstrumentationScope) -> LoggerConfig:
782-
for predicate, meter_config in self._rules:
783-
if predicate(meter_scope):
784-
return meter_config
781+
def __call__(self, logger_scope: InstrumentationScope) -> LoggerConfig:
782+
for predicate, logger_config in self._rules:
783+
if predicate(logger_scope):
784+
return logger_config
785785
# by default return default config
786786
return self._default_config
787787

0 commit comments

Comments
 (0)