in cloudwatch_logs_common/src/utils/cloudwatch_logs_facade.cpp [106:163]
Aws::CloudWatchLogs::ROSCloudWatchLogsErrors CloudWatchLogsFacade::SendLogsToCloudWatch(
Aws::String & next_token, const std::string & log_group, const std::string & log_stream,
LogCollection & logs)
{
Aws::CloudWatchLogs::ROSCloudWatchLogsErrors status = CW_LOGS_SUCCEEDED;
Aws::Vector<Aws::CloudWatchLogs::Model::InputLogEvent> events;
if (logs.empty()) {
status = CW_LOGS_EMPTY_PARAMETER;
AWS_LOGSTREAM_WARN(__func__,
"Log set is empty, "
<< log_group << " Log Stream: " <<
log_stream << ".");
return status;
}
Aws::CloudWatchLogs::Model::PutLogEventsRequest request;
request.SetLogGroupName(log_group.c_str());
request.SetLogStreamName(log_stream.c_str());
if (next_token != "") {
request.SetSequenceToken(next_token);
}
for (auto & log : logs) {
events.push_back(log);
if (events.size() >= kMaxLogsPerRequest) {
request.SetLogEvents(events);
status = SendLogsRequest(request, next_token);
events.clear();
request.SetSequenceToken(next_token);
}
if (CW_LOGS_SUCCEEDED != status) {
AWS_LOGSTREAM_ERROR(__func__, "Failed to send to CloudWatch in Log Group: "
<< log_group << " Log Stream: " << log_stream
<< " with error code: " << status);
return status;
} else {
AWS_LOGSTREAM_DEBUG(__func__,
"A batch of logs was successfully sent to CloudWatch in Log Group: "
<< log_group << " Log Stream: " << log_stream << ".");
}
}
if (!events.empty()) {
request.SetLogEvents(events);
status = SendLogsRequest(request, next_token);
if (CW_LOGS_SUCCEEDED != status) {
AWS_LOGSTREAM_ERROR(__func__, "Failed to send to CloudWatch in Log Group: "
<< log_group << " Log Stream: " << log_stream
<< " with error code: " << status);
} else {
AWS_LOGSTREAM_DEBUG(__func__, "All queued logs were successfully sent to CloudWatch in Log Group: "
<< log_group << " Log Stream: " << log_stream << ".");
}
}
return status;
}