diff --git a/api/include/opentelemetry/logs/logger.h b/api/include/opentelemetry/logs/logger.h index 519516f297..6bc78f857a 100644 --- a/api/include/opentelemetry/logs/logger.h +++ b/api/include/opentelemetry/logs/logger.h @@ -72,8 +72,23 @@ class Logger return; } - IgnoreTraitResult(detail::LogRecordSetterTrait::type>::Set( - log_record.get(), std::forward(args))...); + // + // Keep the parameter pack unpacking order from left to right because left + // ones are usually more important like severity and event_id than the + // attributes. The left to right unpack order could pass the more important + // data to processors to avoid caching and memory allocating. + // +#if __cplusplus <= 201402L + // C++14 does not support fold expressions for parameter pack expansion. + int dummy[] = {(detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args)), + 0)...}; + IgnoreTraitResult(dummy); +#else + IgnoreTraitResult((detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args)), + ...)); +#endif EmitLogRecord(std::move(log_record)); }