class Kuroko2::ExecutionLogger::CloudWatchLogs
def put_logs(events)
def put_logs(events) exception_cb = lambda do |exception| Kuroko2.logger.warn("#{exception.class} #{exception.message} #{events}") case exception when Aws::CloudWatchLogs::Errors::InvalidSequenceTokenException old_token = @put_log_token new_token = exception.message.match(%r{\AThe given sequenceToken is invalid. The next expected sequenceToken is:\s*(\w+)\z})[1] if new_token @put_log_token = new_token Kuroko2.logger.warn("Refreshed sequenceToken from '#{old_token}' to '#{@put_log_token}'") end when Aws::CloudWatchLogs::Errors::ResourceNotFoundException create_log_stream when Aws::CloudWatchLogs::Errors::ThrottlingException sleep(0.5) end end retry_options = { exception_cb: exception_cb, on: RETRY_ERRORS, tries: MAX_RETRY_COUNT, sleep: 0, } Retryable.retryable(retry_options) do response = client.put_log_events( log_group_name: @group_name, log_stream_name: @stream_name, log_events: events, sequence_token: @put_log_token, ) @put_log_token = response.data[:next_sequence_token] Kuroko2.logger.debug("Put logs: #{@group_name} #{@stream_name} / #{response.data}") response end end