Open lalitb opened 10 months ago
Another thought, should we limit the usage of OStreamLogRecordExporter
in async pipeline as the BatchLogRecordProcessor
? So we don't need to make copies of the attributes for most common cases.
The OStreamLogRecordExporter serves as a demonstration model to implement exporters for logs, and it should do it in right way. And also, good to have parity with OStreamSpanExporter which can be used both with Simple and Batch Processor. SpanData in that case maintains the copy of attributes as shared in link above.
This issue was marked as stale due to lack of activity.
Making copy could make sense because the OStream exporter is mostly for debugging purpose.
OStreamLogExporter uses ReadWriteLogRecord as the recordable implementation, and this implementation doesn't maintain copy of message body and attributes:
https://github.com/open-telemetry/opentelemetry-cpp/blob/46e20a42aef521b9cc1b7207310bfefcd490741a/sdk/include/opentelemetry/sdk/logs/read_write_log_record.h#L190-L191
This can result in the use-after-free crash in case the message body or attributes are cleaned-up before the data is processed by batch processor as in below:
Just like SpanData implementation which is used in OStream span exporter, the ReadWriteLogRecord should also maintain the copy of these data.