Skip to content

Commit a8ed00e

Browse files
authored
docs: recommend to use named loggers instead of the root logger as described in #34787 (#35771)
1 parent d335a04 commit a8ed00e

File tree

1 file changed

+20
-15
lines changed
  • sdk/monitor/azure-monitor-opentelemetry-exporter

1 file changed

+20
-15
lines changed

sdk/monitor/azure-monitor-opentelemetry-exporter/README.md

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,14 @@ The following sections provide several code snippets covering some of the most c
154154

155155
Review the [OpenTelemetry Logging SDK][ot_logging_sdk] to learn how to use OpenTelemetry components to collect logs.
156156

157+
When integrating the `AzureMonitorLogExporter`, it's **strongly advised to utilize a named logger** rather
158+
than the root logger.
159+
This recommendation stems from the exporter's dependency on `azure-core` for constructing and dispatching requests.
160+
Since `azure-core` itself uses a Python logger, attaching the handler to the root logger would
161+
inadvertently capture and export these internal log messages as well.
162+
This triggers a recursive loop of logging and exporting, leading to an unnecessary proliferation of log data.
163+
To avoid this, configure a named logger for your application's logging needs or set up your logging handler to filter out logs originating from the SDK library.
164+
157165
#### Export Hello World Log
158166

159167
```python
@@ -181,13 +189,12 @@ exporter = AzureMonitorLogExporter(
181189
)
182190

183191
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
184-
handler = LoggingHandler()
185-
186-
# Attach LoggingHandler to root logger
187-
logging.getLogger().addHandler(handler)
188-
logging.getLogger().setLevel(logging.NOTSET)
189192

193+
# Attach LoggingHandler to namespaced logger
194+
handler = LoggingHandler()
190195
logger = logging.getLogger(__name__)
196+
logger.addHandler(handler)
197+
logger.setLevel(logging.NOTSET)
191198

192199
logger.warning("Hello World!")
193200

@@ -226,13 +233,12 @@ exporter = AzureMonitorLogExporter(
226233
)
227234

228235
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
229-
handler = LoggingHandler()
230-
231-
# Attach LoggingHandler to root logger
232-
logging.getLogger().addHandler(handler)
233-
logging.getLogger().setLevel(logging.NOTSET)
234236

237+
# Attach LoggingHandler to namespaced logger
238+
handler = LoggingHandler()
235239
logger = logging.getLogger(__name__)
240+
logger.addHandler(handler)
241+
logger.setLevel(logging.NOTSET)
236242

237243
logger.info("INFO: Outside of span")
238244
with tracer.start_as_current_span("foo"):
@@ -266,13 +272,12 @@ exporter = AzureMonitorLogExporter(
266272
)
267273

268274
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
269-
handler = LoggingHandler()
270-
271-
# Attach LoggingHandler to root logger
272-
logging.getLogger().addHandler(handler)
273-
logging.getLogger().setLevel(logging.NOTSET)
274275

276+
# Attach LoggingHandler to namespaced logger
277+
handler = LoggingHandler()
275278
logger = logging.getLogger(__name__)
279+
logger.addHandler(handler)
280+
logger.setLevel(logging.NOTSET)
276281

277282
# Custom properties
278283
logger.debug("DEBUG: Debug with properties", extra={"debug": "true"})

0 commit comments

Comments
 (0)