Skip to content

Commit fc9368f

Browse files
iurisilvioocelotl
andauthored
Fix flush exception thrown when LoggerProvider not configured (#3608)
* Fix flush exception thrown when LoggerProvider not configured * Fix test case * Use right object in test case --------- Co-authored-by: Diego Hurtado <[email protected]>
1 parent 55bf100 commit fc9368f

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

CHANGELOG.md

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

88
## Unreleased
99

10+
- Fix flush error when no LoggerProvider configured for LoggingHandler
11+
([#3608](https://github.com/open-telemetry/opentelemetry-python/pull/3608))
1012
- Fix `OTLPMetricExporter` ignores `preferred_aggregation` property
1113
([#3603](https://github.com/open-telemetry/opentelemetry-python/pull/3603))
1214
- Logs: set `observed_timestamp` field

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -553,9 +553,10 @@ def emit(self, record: logging.LogRecord) -> None:
553553

554554
def flush(self) -> None:
555555
"""
556-
Flushes the logging output.
556+
Flushes the logging output. Skip flushing if logger is NoOp.
557557
"""
558-
self._logger_provider.force_flush()
558+
if not isinstance(self._logger, NoOpLogger):
559+
self._logger_provider.force_flush()
559560

560561

561562
class Logger(APILogger):

opentelemetry-sdk/tests/logs/test_handler.py

+13
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,19 @@ def test_log_record_emit_noop(self):
7979
logger.warning("Warning message")
8080
handler_mock._translate.assert_not_called()
8181

82+
def test_log_flush_noop(self):
83+
84+
no_op_logger_provider = NoOpLoggerProvider()
85+
no_op_logger_provider.force_flush = Mock()
86+
87+
logger = get_logger(logger_provider=no_op_logger_provider)
88+
89+
with self.assertLogs(level=logging.WARNING):
90+
logger.warning("Warning message")
91+
92+
logger.handlers[0].flush()
93+
no_op_logger_provider.force_flush.assert_not_called()
94+
8295
def test_log_record_no_span_context(self):
8396
emitter_provider_mock = Mock(spec=LoggerProvider)
8497
emitter_mock = APIGetLogger(

0 commit comments

Comments
 (0)