diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py
index 11e63073aaecc32c742331c2d989293186fe8e6d..d94d8b29bc3e2754924a3c3346145ce8129fa7aa 100755
--- a/kolla/cmd/build.py
+++ b/kolla/cmd/build.py
@@ -54,7 +54,6 @@ class WorkerThread(Thread):
         self.nocache = args['no_cache']
         self.forcerm = not args['keep']
         self.retries = args['retries']
-        self.threads = args['threads']
         self.dc = docker.Client(**docker.utils.kwargs_from_env())
         super(WorkerThread, self).__init__()
 
@@ -65,9 +64,9 @@ class WorkerThread(Thread):
         # an 'error' status
         for child in image['children']:
             self.queue.put(child)
-            LOG.debug('Added image {} to queue'.format(child['name']))
+            LOG.debug('{}:Added image to queue'.format(child['name']))
         self.queue.task_done()
-        LOG.debug('Processed: {}'.format(image['name']))
+        LOG.debug('{}:Processed'.format(image['name']))
 
     def run(self):
         """Executes tasks until the queue is empty"""
@@ -93,7 +92,8 @@ class WorkerThread(Thread):
         dest_tar = os.path.join(dest_dir, source['dest'])
 
         if source.get('type') == 'url':
-            LOG.debug("Getting tarball from " + source['source'])
+            LOG.debug("{}:Getting tarball from {}".format(image['name'],
+                                                          source['source']))
             r = requests.get(source['source'])
 
             if r.status_code == 200:
@@ -101,8 +101,8 @@ class WorkerThread(Thread):
                     f.write(r.content)
             else:
                 LOG.error(
-                    'Failed to download tarball: status_code {}'.format(
-                        r.status_code))
+                    '{}:Failed to download tarball: status_code {}'.format(
+                        image['name'], r.status_code))
                 image['status'] = "error"
                 return
 
@@ -110,13 +110,16 @@ class WorkerThread(Thread):
             clone_dir = os.path.splitext(dest_tar)[0] + \
                 '-' + source['reference']
             try:
-                LOG.debug("Cloning from " + source['source'])
+                LOG.debug("{}:Cloning from {}".format(image['name'],
+                                                      source['source']))
                 git.Git().clone(source['source'], clone_dir)
-                LOG.debug("Git checkout by reference " + source['reference'])
+                LOG.debug("{}:Git checkout by reference {}".format(
+                          image['name'], source['reference']))
                 git.Git(clone_dir).checkout(source['reference'])
             except Exception as e:
-                LOG.error("Failed to get source from git")
-                LOG.error("Error: " + str(e))
+                LOG.error("{}:Failed to get source from git".format(
+                          image['name']))
+                LOG.error("{}:Error:{}".format(image['name'], str(e)))
                 # clean-up clone folder to retry
                 shutil.rmtree(clone_dir)
                 image['status'] = "error"
@@ -126,7 +129,8 @@ class WorkerThread(Thread):
                 tar.add(clone_dir, arcname=os.path.basename(clone_dir))
 
         else:
-            LOG.error("Wrong source type: " + source.get('type'))
+            LOG.error("{}:Wrong source type '{}'".format(image['name'],
+                                                         source.get('type')))
             image['status'] = "error"
             return
 
@@ -134,20 +138,20 @@ class WorkerThread(Thread):
         os.utime(os.path.join(dest_dir, source['dest']), (0, 0))
 
     def builder(self, image):
-        LOG.debug('Processing: {}'.format(image['name']))
+        LOG.debug('{}:Processing'.format(image['name']))
         if image['status'] == 'unmatched':
             return
 
         if (image['parent'] is not None and
                 image['parent']['status'] in ['error', 'parent_error',
                                               'connection_error']):
-            LOG.error('Parent image error\'d with message "{}"'.format(
-                      image['parent']['status']))
+            LOG.error('{}:Parent image error\'d with message "{}"'.format(
+                      image['name'], image['parent']['status']))
             image['status'] = "parent_error"
             return
 
         image['status'] = "building"
-        LOG.info('Building {}'.format(image['name']))
+        LOG.info('{}:Building'.format(image['name']))
 
         if 'source' in image and 'source' in image['source']:
             self.process_source(image)
@@ -168,21 +172,22 @@ class WorkerThread(Thread):
 
             if 'stream' in stream:
                 image['logs'] = image['logs'] + stream['stream']
-                if self.threads == 1:
-                    LOG.info('{}:{}'.format(image['name'],
-                                            stream['stream'].rstrip()))
+                for line in stream['stream'].split('\n'):
+                    if line:
+                        LOG.info('{}:{}'.format(image['name'], line))
 
             if 'errorDetail' in stream:
                 image['status'] = "error"
-                LOG.error(stream['errorDetail']['message'])
+                LOG.error('{}:Error\'d with the following message'.format(
+                          image['name']))
+                for line in stream['errorDetail']['message'].split('\n'):
+                    if line:
+                        LOG.error('{}:{}'.format(image['name'], line))
                 return
 
         image['status'] = "built"
 
-        if self.threads == 1:
-            LOG.info('Built: {}'.format(image['name']))
-        else:
-            LOG.info('{}Built: {}'.format(image['logs'], image['name']))
+        LOG.info('{}:Built'.format(image['name']))
 
 
 def arg_parser():
@@ -354,7 +359,7 @@ class KollaWorker(object):
                            image['parent']['status'] != 'matched'):
                         image = image['parent']
                         image['status'] = 'matched'
-                        LOG.debug('Matched image {}'.format(image['name']))
+                        LOG.debug('{}:Matched regex'.format(image['name']))
                 else:
                     image['status'] = 'unmatched'
         else:
@@ -363,6 +368,16 @@ class KollaWorker(object):
 
     def summary(self):
         """Walk the dictionary of images statuses and print results"""
+        # For debug we print the logs again if the image error'd. This is to
+        # to help us debug and it will be extra helpful in the gate.
+        for image in self.images:
+            if image['status'] == 'error':
+                LOG.debug("{}:Failed with the following logs".format(
+                          image['name']))
+                for line in image['logs'].split('\n'):
+                    if line:
+                        LOG.debug("{}:{}".format(image['name'], ''.join(line)))
+
         self.get_image_statuses()
 
         if self.image_statuses_good:
@@ -440,7 +455,7 @@ class KollaWorker(object):
                             self.config.get(image['name'], 'reference')
 
                 except ConfigParser.NoSectionError:
-                    LOG.debug('No config found for {}'.format(image['name']))
+                    LOG.debug('{}:No config found'.format(image['name']))
                     pass
 
             self.images.append(image)
@@ -473,7 +488,7 @@ class KollaWorker(object):
         for image in self.images:
             if image['parent'] is None:
                 queue.put(image)
-                LOG.debug('Added image {} to queue'.format(image['name']))
+                LOG.debug('{}:Added image to queue'.format(image['name']))
 
         return queue