|
47 | 47 | OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, |
48 | 48 | OTEL_TRACES_SAMPLER, |
49 | 49 | OTEL_TRACES_SAMPLER_ARG, |
| 50 | + OTEL_PYTHON_LOG_LEVEL, |
| 51 | + OTEL_PYTHON_LOG_FORMAT, |
50 | 52 | ) |
51 | 53 | from opentelemetry.sdk.metrics import MeterProvider |
52 | 54 | from opentelemetry.sdk.metrics.export import ( |
|
89 | 91 |
|
90 | 92 | _OTEL_SAMPLER_ENTRY_POINT_GROUP = "opentelemetry_traces_sampler" |
91 | 93 |
|
| 94 | +_OTEL_PYTHON_LOG_LEVEL_BY_NAME = { |
| 95 | + "notset": logging.NOTSET, |
| 96 | + "debug": logging.DEBUG, |
| 97 | + "info": logging.INFO, |
| 98 | + "warn": logging.WARNING, |
| 99 | + "warning": logging.WARNING, |
| 100 | + "error": logging.ERROR, |
| 101 | +} |
| 102 | + |
92 | 103 | _logger = logging.getLogger(__name__) |
93 | 104 |
|
94 | 105 |
|
@@ -132,6 +143,9 @@ def _get_sampler() -> str | None: |
132 | 143 | def _get_id_generator() -> str: |
133 | 144 | return environ.get(OTEL_PYTHON_ID_GENERATOR, _DEFAULT_ID_GENERATOR) |
134 | 145 |
|
| 146 | +def _get_log_level() -> int: |
| 147 | + return _OTEL_PYTHON_LOG_LEVEL_BY_NAME.get(environ.get(OTEL_PYTHON_LOG_LEVEL, "notset").lower().strip(), logging.NOTSET) |
| 148 | + |
135 | 149 |
|
136 | 150 | def _get_exporter_entry_point( |
137 | 151 | exporter_name: str, signal_type: Literal["traces", "metrics", "logs"] |
@@ -255,11 +269,19 @@ def _init_logging( |
255 | 269 | if setup_logging_handler: |
256 | 270 | _patch_basic_config() |
257 | 271 |
|
258 | | - # Add OTel handler |
| 272 | + # Log Handler |
| 273 | + root_logger = logging.getLogger() |
259 | 274 | handler = LoggingHandler( |
260 | | - level=logging.NOTSET, logger_provider=provider |
| 275 | + logger_provider=provider |
261 | 276 | ) |
262 | | - logging.getLogger().addHandler(handler) |
| 277 | + # Log level |
| 278 | + if OTEL_PYTHON_LOG_LEVEL in environ: |
| 279 | + handler.setLevel(_get_log_level()) |
| 280 | + # Log format |
| 281 | + if OTEL_PYTHON_LOG_FORMAT in environ: |
| 282 | + log_format = environ.get(OTEL_PYTHON_LOG_FORMAT, logging.BASIC_FORMAT) |
| 283 | + handler.setFormatter(logging.Formatter(log_format)) |
| 284 | + root_logger.addHandler(handler) |
263 | 285 |
|
264 | 286 |
|
265 | 287 | def _patch_basic_config(): |
@@ -470,7 +492,8 @@ class _OTelSDKConfigurator(_BaseConfigurator): |
470 | 492 |
|
471 | 493 | Initializes several crucial OTel SDK components (i.e. TracerProvider, |
472 | 494 | MeterProvider, Processors...) according to a default implementation. Other |
473 | | - Configurators can subclass and slightly alter this initialization. |
| 495 | + Configurators can subclass and slightly alter |
| 496 | + this initialization. |
474 | 497 |
|
475 | 498 | NOTE: This class should not be instantiated nor should it become an entry |
476 | 499 | point on the `opentelemetry-sdk` package. Instead, distros should subclass |
|
0 commit comments