diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index 44d08f5c..1c8ad032 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -25,6 +25,7 @@ import bb
 import bb.msg
 import bb.process
 import bb.progress
+import shutil
 from io import StringIO
 from bb import data, event, utils
 
@@ -103,6 +104,15 @@ class TaskFailed(TaskBase):
     def __init__(self, task, fn, logfile, metadata, errprinted = False):
         self.errprinted = errprinted
         super(TaskFailed, self).__init__(task, fn, logfile, metadata)
+        d = metadata
+        errorDir = d.getVar('ERROR_DIR')
+        if errorDir is not None:
+            pkg = d.getVar("PF")
+            newtmp = os.path.join(errorDir, pkg)
+            if os.path.exists(newtmp):
+                shutil.rmtree(newtmp)
+            tempdir = d.getVar('T')
+            shutil.copytree(tempdir, newtmp)
 
 class TaskFailedSilent(TaskBase):
     """Task execution failed (silently)"""
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index bc7e1817..a77749c3 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -25,6 +25,7 @@ from multiprocessing import Process
 import shlex
 import pprint
 import time
+import shutil
 
 bblogger = logging.getLogger("BitBake")
 logger = logging.getLogger("BitBake.RunQueue")
@@ -1334,6 +1335,11 @@ class RunQueue:
         self.rqexe = None
         self.worker = {}
         self.fakeworker = {}
+        errorDir = self.cfgData.getVar('ERROR_DIR')
+        if errorDir is not None:
+            if os.path.exists(errorDir):
+                shutil.rmtree(errorDir)
+            os.mkdir(errorDir)
 
     @staticmethod
     def send_pickled_data(worker, data, name):
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index ef408faa..f345b9cb 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -200,3 +200,5 @@ PATCHRESOLVE ?= "noop"
 
 PREFERRED_PROVIDER_bootstrap-host ??= "isar-mmdebstrap-host"
 PREFERRED_PROVIDER_bootstrap-target ??= "isar-mmdebstrap-target"
+
+ERROR_DIR ?= "${TOPDIR}/errorLogs"
