diff --git a/scripts/Python/interface/SBDebugger.i b/scripts/Python/interface/SBDebugger.i
index 465c856..784df42 100644
--- a/scripts/Python/interface/SBDebugger.i
+++ b/scripts/Python/interface/SBDebugger.i
@@ -122,6 +122,9 @@ public:
     static lldb::SBDebugger
     Create(bool source_init_files);
 
+    static lldb::SBDebugger
+    Create(bool source_init_files, lldb::LogOutputCallback callback, void *baton);
+
     static void
     Destroy (lldb::SBDebugger &debugger);
 
diff --git a/scripts/Python/python-extensions.swig b/scripts/Python/python-extensions.swig
index cd8f1cf..cc2c3ea 100644
--- a/scripts/Python/python-extensions.swig
+++ b/scripts/Python/python-extensions.swig
@@ -678,3 +678,13 @@ class value(object):
         return not self.__eq__(other)
 %}
 
+%{
+// For SBDebugger::Create(bool, lldb::LogOutputCallback, void*)
+void LLDBSwigPythonCallPythonLogOutputCallback(const char *str, void *baton) {
+    SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+    PyObject_CallFunction(reinterpret_cast<PyObject*>(baton), const_cast<char*>("s"), str);
+    SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+%}
+
diff --git a/scripts/Python/python-typemaps.swig b/scripts/Python/python-typemaps.swig
index 0eca5ea..fdb63bf 100644
--- a/scripts/Python/python-typemaps.swig
+++ b/scripts/Python/python-typemaps.swig
@@ -329,4 +329,24 @@
 
 %typemap(freearg) (uint32_t *versions) {
     free($1);
-}
\ No newline at end of file
+}
+
+// For Log::LogOutputCallback
+void LLDBSwigPythonCallPythonLogOutputCallback(const char *str, void *baton);
+%typemap(in) (lldb::LogOutputCallback callback, void *baton) {
+  if (!PyCallable_Check(reinterpret_cast<PyObject*>($input))) {
+    PyErr_SetString(PyExc_TypeError, "Need a callable object!");
+    return NULL;
+  }
+
+  $1 = LLDBSwigPythonCallPythonLogOutputCallback;
+  $2 = $input;
+}
+
+%typemap(typecheck) (lldb::LogOutputCallback callback, void *baton) {
+  if (!PyCallable_Check(reinterpret_cast<PyObject*>($input))) {
+    $1 = 0;
+  } else {
+    $1 = 1;
+  }
+}
