Skip to content

Commit 6095433

Browse files
authored
Bug fix for message field on Microsoft.ApplicationInsights.Message (#43060)
* Bug fix for message field on Microsoft.ApplicationInsights.Message to not export logs with empty message body * Updated CHANGELOG * Fixed typing * Trigger CI/CD pipeline
1 parent 1da8678 commit 6095433

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
### Bugs Fixed
1010
- Fixes issues #42897 - TypeError in _transmit_from_storage: LocalFileBlob.get() returns None
1111
([#42897](https://github.com/Azure/azure-sdk-for-python/pull/42951))
12+
- Fix logic for message field on Microsoft.ApplicationInsights.Message to sync with Breeze
13+
([#43060](https://github.com/Azure/azure-sdk-for-python/pull/43060))
1214

1315
### Other Changes
1416

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/logs/_exporter.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Licensed under the MIT License.
33
import json
44
import logging
5-
from typing import Optional, Sequence, Any
5+
from typing import Optional, Sequence, Any, Union
66

77
from opentelemetry._logs.severity import SeverityNumber
88
from opentelemetry.semconv.attributes.exception_attributes import (
@@ -63,7 +63,7 @@ def export(self, batch: Sequence[LogData], **kwargs: Any) -> LogExportResult: #
6363
:return: The result of the export.
6464
:rtype: ~opentelemetry.sdk._logs.export.LogData
6565
"""
66-
envelopes = [self._log_to_envelope(log) for log in batch]
66+
envelopes = [envelope for log in batch if (envelope := self._log_to_envelope(log)) is not None]
6767
try:
6868
result = self._transmit(envelopes)
6969
self._handle_transmit_from_storage(envelopes, result)
@@ -80,8 +80,10 @@ def shutdown(self) -> None:
8080
if self.storage:
8181
self.storage.close()
8282

83-
def _log_to_envelope(self, log_data: LogData) -> TelemetryItem:
83+
def _log_to_envelope(self, log_data: LogData) -> Union[TelemetryItem, None]:
8484
envelope = _convert_log_to_envelope(log_data)
85+
if envelope is None:
86+
return None
8587
envelope.instrumentation_key = self._instrumentation_key
8688
return envelope
8789

@@ -115,7 +117,7 @@ def _log_data_is_event(log_data: LogData) -> bool:
115117

116118

117119
# pylint: disable=protected-access
118-
def _convert_log_to_envelope(log_data: LogData) -> TelemetryItem:
120+
def _convert_log_to_envelope(log_data: LogData) -> Union[TelemetryItem, None]:
119121
log_record = log_data.log_record
120122
time_stamp = log_record.timestamp if log_record.timestamp is not None else log_record.observed_timestamp
121123
envelope = _utils._create_telemetry_item(time_stamp)
@@ -189,6 +191,9 @@ def _convert_log_to_envelope(log_data: LogData) -> TelemetryItem:
189191
severity_level=severity_level, # type: ignore
190192
properties=properties,
191193
)
194+
if len(data.message) == 0:
195+
_logger.warning("Log record body cannot be empty. Skipping export for this log record.")
196+
return None
192197
envelope.data = MonitorBase(base_data=data, base_type="MessageData")
193198

194199
return envelope

sdk/monitor/azure-monitor-opentelemetry-exporter/tests/logs/test_logs.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -408,16 +408,12 @@ def test_log_to_envelope_log(self):
408408
def test_log_to_envelope_log_none(self):
409409
exporter = self._exporter
410410
envelope = exporter._log_to_envelope(self._log_data_none)
411-
self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Message")
412-
self.assertEqual(envelope.data.base_type, "MessageData")
413-
self.assertEqual(envelope.data.base_data.message, "")
411+
self.assertEqual(envelope, None)
414412

415413
def test_log_to_envelope_log_empty(self):
416414
exporter = self._exporter
417415
envelope = exporter._log_to_envelope(self._log_data_empty)
418-
self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Message")
419-
self.assertEqual(envelope.data.base_type, "MessageData")
420-
self.assertEqual(envelope.data.base_data.message, "")
416+
self.assertEqual(envelope, None)
421417

422418
def test_log_to_envelope_log_complex_body(self):
423419
exporter = self._exporter

0 commit comments

Comments
 (0)