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
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#4798](https://github.com/open-telemetry/opentelemetry-python/pull/4798))
- Silence events API warnings for internal users
([#4847](https://github.com/open-telemetry/opentelemetry-python/pull/4847))
- opentelemetry-sdk: make it possible to override the default processors in the SDK configurator
([#4806](https://github.com/open-telemetry/opentelemetry-python/pull/4806))
- Prevent possible endless recursion from happening in `SimpleLogRecordProcessor.on_emit`,
([#4799](https://github.com/open-telemetry/opentelemetry-python/pull/4799)) and ([#4867](https://github.com/open-telemetry/opentelemetry-python/pull/4867)).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import warnings
from abc import ABC, abstractmethod
from os import environ
from typing import Any, Callable, Mapping, Sequence, Type, Union
from typing import Any, Callable, Mapping, Protocol, Sequence, Type, Union

from typing_extensions import Literal

Expand All @@ -37,7 +37,11 @@
OTEL_TRACES_EXPORTER,
)
from opentelemetry.metrics import set_meter_provider
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs import (
LoggerProvider,
LoggingHandler,
LogRecordProcessor,
)
from opentelemetry.sdk._logs.export import (
BatchLogRecordProcessor,
LogRecordExporter,
Expand All @@ -58,7 +62,7 @@
PeriodicExportingMetricReader,
)
from opentelemetry.sdk.resources import Attributes, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace import SpanProcessor, TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, SpanExporter
from opentelemetry.sdk.trace.id_generator import IdGenerator
from opentelemetry.sdk.trace.sampling import Sampler
Expand Down Expand Up @@ -105,6 +109,18 @@
]


class ExporterSpanProcessorT(Protocol):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we name this SpanProcessorCustomizerT and everything in this PR Customizer instead ? Or maybe Initializer ?

def __call__(
self, span_exporter: SpanExporter, *args, **kwargs
) -> SpanProcessor: ...


class ExporterLogRecordProcessorT(Protocol):
def __call__(
self, exporter: LogRecordExporter, *args, **kwargs
) -> LogRecordProcessor: ...


def _import_config_components(
selected_components: Sequence[str], entry_point_name: str
) -> list[tuple[str, Type]]:
Expand Down Expand Up @@ -210,6 +226,8 @@ def _init_tracing(
sampler: Sampler | None = None,
resource: Resource | None = None,
exporter_args_map: ExporterArgsMap | None = None,
span_processors: Sequence[SpanProcessor] | None = None,
export_span_processor: ExporterSpanProcessorT | None = None,
):
provider = TracerProvider(
id_generator=id_generator,
Expand All @@ -219,10 +237,16 @@ def _init_tracing(
set_tracer_provider(provider)

exporter_args_map = exporter_args_map or {}
export_processor = export_span_processor or BatchSpanProcessor

span_processors = span_processors or []
for span_processor in span_processors:
provider.add_span_processor(span_processor)

for _, exporter_class in exporters.items():
exporter_args = exporter_args_map.get(exporter_class, {})
provider.add_span_processor(
BatchSpanProcessor(exporter_class(**exporter_args))
export_processor(exporter_class(**exporter_args))
)


Expand Down Expand Up @@ -256,15 +280,23 @@ def _init_logging(
resource: Resource | None = None,
setup_logging_handler: bool = True,
exporter_args_map: ExporterArgsMap | None = None,
log_record_processors: Sequence[LogRecordProcessor] | None = None,
export_log_record_processor: ExporterLogRecordProcessorT | None = None,
):
provider = LoggerProvider(resource=resource)
set_logger_provider(provider)

exporter_args_map = exporter_args_map or {}
export_processor = export_log_record_processor or BatchLogRecordProcessor

log_record_processors = log_record_processors or []
for log_record_processor in log_record_processors:
provider.add_log_record_processor(log_record_processor)

for _, exporter_class in exporters.items():
exporter_args = exporter_args_map.get(exporter_class, {})
provider.add_log_record_processor(
BatchLogRecordProcessor(exporter_class(**exporter_args))
export_processor(exporter_class(**exporter_args))
)

# silence warnings from internal users until we drop the deprecated Events API
Expand Down Expand Up @@ -429,7 +461,12 @@ def _initialize_components(
id_generator: IdGenerator | None = None,
setup_logging_handler: bool | None = None,
exporter_args_map: ExporterArgsMap | None = None,
span_processors: Sequence[SpanProcessor] | None = None,
export_span_processor: ExporterSpanProcessorT | None = None,
log_record_processors: Sequence[LogRecordProcessor] | None = None,
export_log_record_processor: ExporterLogRecordProcessorT | None = None,
):
# pylint: disable=too-many-locals
if trace_exporter_names is None:
trace_exporter_names = []
if metric_exporter_names is None:
Expand Down Expand Up @@ -464,6 +501,8 @@ def _initialize_components(
sampler=sampler,
resource=resource,
exporter_args_map=exporter_args_map,
span_processors=span_processors,
export_span_processor=export_span_processor,
)
_init_metrics(
metric_exporters, resource, exporter_args_map=exporter_args_map
Expand All @@ -482,6 +521,8 @@ def _initialize_components(
resource,
setup_logging_handler,
exporter_args_map=exporter_args_map,
log_record_processors=log_record_processors,
export_log_record_processor=export_log_record_processor,
)


Expand Down
Loading
Loading