Skip to content

Commit d996147

Browse files
committed
Squash: Add Log Level and Format configuration for autoinstrumentation
1 parent 037e9cb commit d996147

File tree

4 files changed

+302
-6
lines changed

4 files changed

+302
-6
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
- Refactor `BatchLogRecordProcessor` to simplify code and make the control flow more
1111
clear ([#4562](https://github.com/open-telemetry/opentelemetry-python/pull/4562/)
1212
and [#4535](https://github.com/open-telemetry/opentelemetry-python/pull/4535)).
13+
- Enable configuration of logging format and level in auto-instrumentation
14+
([#4203](https://github.com/open-telemetry/opentelemetry-python/pull/4203))
1315

1416

1517
## Version 1.33.0/0.54b0 (2025-05-09)

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL,
4848
OTEL_TRACES_SAMPLER,
4949
OTEL_TRACES_SAMPLER_ARG,
50+
OTEL_PYTHON_LOG_LEVEL,
51+
OTEL_PYTHON_LOG_FORMAT,
5052
)
5153
from opentelemetry.sdk.metrics import MeterProvider
5254
from opentelemetry.sdk.metrics.export import (
@@ -89,6 +91,15 @@
8991

9092
_OTEL_SAMPLER_ENTRY_POINT_GROUP = "opentelemetry_traces_sampler"
9193

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+
92103
_logger = logging.getLogger(__name__)
93104

94105

@@ -132,6 +143,9 @@ def _get_sampler() -> str | None:
132143
def _get_id_generator() -> str:
133144
return environ.get(OTEL_PYTHON_ID_GENERATOR, _DEFAULT_ID_GENERATOR)
134145

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+
135149

136150
def _get_exporter_entry_point(
137151
exporter_name: str, signal_type: Literal["traces", "metrics", "logs"]
@@ -255,11 +269,19 @@ def _init_logging(
255269
if setup_logging_handler:
256270
_patch_basic_config()
257271

258-
# Add OTel handler
272+
# Log Handler
273+
root_logger = logging.getLogger()
259274
handler = LoggingHandler(
260-
level=logging.NOTSET, logger_provider=provider
275+
logger_provider=provider
261276
)
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)
263285

264286

265287
def _patch_basic_config():
@@ -470,7 +492,8 @@ class _OTelSDKConfigurator(_BaseConfigurator):
470492
471493
Initializes several crucial OTel SDK components (i.e. TracerProvider,
472494
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.
474497
475498
NOTE: This class should not be instantiated nor should it become an entry
476499
point on the `opentelemetry-sdk` package. Instead, distros should subclass

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,22 @@
5454
Default: "info"
5555
"""
5656

57+
OTEL_PYTHON_LOG_FORMAT = "OTEL_PYTHON_LOG_FORMAT"
58+
"""
59+
.. envvar:: OTEL_PYTHON_LOG_FORMAT
60+
61+
The :envvar:`OTEL_PYTHON_LOG_FORMAT` environment variable sets the log format for the OpenTelemetry LoggingHandler's Formatter
62+
Default: "logging.BASIC_FORMAT"
63+
"""
64+
65+
OTEL_PYTHON_LOG_LEVEL = "OTEL_PYTHON_LOG_LEVEL"
66+
"""
67+
.. envvar:: OTEL_PYTHON_LOG_LEVEL
68+
69+
The :envvar:`OTEL_PYTHON_LOG_LEVEL` environment variable sets the log level for the OpenTelemetry LoggingHandler
70+
Default: "logging.NOTSET"
71+
"""
72+
5773
OTEL_TRACES_SAMPLER = "OTEL_TRACES_SAMPLER"
5874
"""
5975
.. envvar:: OTEL_TRACES_SAMPLER

0 commit comments

Comments
 (0)