Skip to content

Commit 33f578d

Browse files
tpellissierclaude
andcommitted
Fix missing imports in examples, use internal log level filter
- Add DataverseClient import to README and SKILL.md telemetry snippets - Stop calling logger.setLevel() which mutates global logging state; use internal _log_level threshold to filter emissions instead - Update test to check _log_level instead of logger.level Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7985df7 commit 33f578d

4 files changed

Lines changed: 20 additions & 17 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,7 @@ client.files.upload(
391391
### Telemetry & observability
392392

393393
```python
394+
from PowerPlatform.Dataverse.client import DataverseClient
394395
from PowerPlatform.Dataverse.core.telemetry import TelemetryConfig, TelemetryHook
395396
from PowerPlatform.Dataverse.core.config import DataverseConfig
396397

src/PowerPlatform/Dataverse/claude_skill/dataverse-sdk-use/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ client.files.upload(
321321
The SDK supports opt-in telemetry via hooks, OpenTelemetry, and Python logging:
322322

323323
```python
324+
from PowerPlatform.Dataverse.client import DataverseClient
324325
from PowerPlatform.Dataverse.core.telemetry import TelemetryConfig, TelemetryHook
325326
from PowerPlatform.Dataverse.core.config import DataverseConfig
326327

src/PowerPlatform/Dataverse/core/telemetry.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ def __init__(self, config: TelemetryConfig) -> None:
219219
self._tracer: Any = None
220220
self._meter: Any = None
221221
self._logger: Optional[logging.Logger] = None
222+
self._log_level: int = logging.WARNING
222223
self._hooks = list(config.hooks)
223224

224225
# Metric instruments (populated in _initialize)
@@ -261,8 +262,7 @@ def _initialize(self) -> None:
261262

262263
if self._config.enable_logging:
263264
self._logger = logging.getLogger(self._config.logger_name)
264-
level = getattr(logging, self._config.log_level.upper(), logging.WARNING)
265-
self._logger.setLevel(level)
265+
self._log_level = getattr(logging, self._config.log_level.upper(), logging.WARNING)
266266

267267
def _setup_metrics(self) -> None:
268268
if not self._meter:
@@ -426,23 +426,24 @@ def record_response(
426426
except Exception:
427427
pass
428428

429-
# 3. Logging
429+
# 3. Logging (use _log_level as internal filter to avoid mutating global logger state)
430430
if self._logger:
431431
try:
432432
level = logging.WARNING if (status_code >= 400 or error) else logging.DEBUG
433-
self._logger.log(
434-
level,
435-
"%s %s %s %.1fms",
436-
ctx.operation,
437-
ctx.method,
438-
status_code,
439-
duration_ms,
440-
extra={
441-
"client_request_id": ctx.client_request_id,
442-
"correlation_id": ctx.correlation_id,
443-
"service_request_id": service_request_id,
444-
},
445-
)
433+
if level >= self._log_level:
434+
self._logger.log(
435+
level,
436+
"%s %s %s %.1fms",
437+
ctx.operation,
438+
ctx.method,
439+
status_code,
440+
duration_ms,
441+
extra={
442+
"client_request_id": ctx.client_request_id,
443+
"correlation_id": ctx.correlation_id,
444+
"service_request_id": service_request_id,
445+
},
446+
)
446447
except Exception:
447448
pass
448449

tests/unit/core/test_telemetry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def test_logging_enabled_creates_logger(self):
193193
def test_invalid_log_level_falls_back_to_warning(self):
194194
mgr = TelemetryManager(TelemetryConfig(enable_logging=True, log_level="VERBOSE"))
195195
self.assertIsNotNone(mgr._logger)
196-
self.assertEqual(mgr._logger.level, logging.WARNING)
196+
self.assertEqual(mgr._log_level, logging.WARNING)
197197

198198
def test_factory_with_hooks_only_returns_real_manager(self):
199199
hook = TelemetryHook()

0 commit comments

Comments
 (0)