Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit de1646a

Browse files
committedFeb 1, 2022
Logging: Defensively access provider resource
Now service name is extracted from the provider defensively and lazily. This accounts for an SDK that does not provide access to "resource" via TracerProviders and for lazy initialization of TracerProviders. Fixes open-telemetry#810
1 parent 2189e81 commit de1646a

File tree

2 files changed

+18
-6
lines changed
  • instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging

2 files changed

+18
-6
lines changed
 

‎CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.9.1-0.28b1...HEAD)
99

10+
### Fixed
11+
12+
- `opentelemetry-instrumentation-logging` retrieves service name defensively.
13+
([#890](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/890))
14+
1015
## [1.9.1-0.28b1](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.9.1-0.28b1) - 2022-01-29
1116

1217

‎instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/__init__.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import logging # pylint: disable=import-self
1818
from os import environ
19-
from typing import Collection
19+
from typing import Collection, Optional
2020

2121
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
2222
from opentelemetry.instrumentation.logging.constants import (
@@ -76,20 +76,26 @@ def instrumentation_dependencies(self) -> Collection[str]:
7676
return _instruments
7777

7878
def _instrument(self, **kwargs):
79-
service_name = ""
80-
provider = kwargs.get("tracer_provider", None) or get_tracer_provider()
81-
resource = provider.resource if provider else None
82-
if resource:
83-
service_name = resource.attributes.get("service.name")
8479

8580
old_factory = logging.getLogRecordFactory()
8681
LoggingInstrumentor._old_factory = old_factory
8782

83+
service_name = None
8884
def record_factory(*args, **kwargs):
8985
record = old_factory(*args, **kwargs)
9086

9187
record.otelSpanID = "0"
9288
record.otelTraceID = "0"
89+
90+
nonlocal service_name
91+
if service_name is None:
92+
provider = kwargs.get("tracer_provider", None) or get_tracer_provider()
93+
resource = getattr(provider, "resource", None)
94+
if resource:
95+
service_name = resource.attributes.get("service.name") or ""
96+
else:
97+
service_name = ""
98+
9399
record.otelServiceName = service_name
94100

95101
span = get_current_span()
@@ -100,6 +106,7 @@ def record_factory(*args, **kwargs):
100106
record.otelTraceID = format(ctx.trace_id, "032x")
101107
return record
102108

109+
103110
logging.setLogRecordFactory(record_factory)
104111

105112
set_logging_format = kwargs.get(

0 commit comments

Comments
 (0)
Please sign in to comment.