diff --git a/includes/errors.inc b/includes/errors.inc
index e8cef88..6432d96 100644
--- a/includes/errors.inc
+++ b/includes/errors.inc
@@ -83,12 +83,13 @@ function _drupal_error_handler_real($error_level, $message, $filename, $line, $c
       '%file' => $caller['file'],
       '%line' => $caller['line'],
       'severity_level' => $severity_level,
+      '%backtrace' => print_r(debug_backtrace(), TRUE),
     ), $error_level == E_RECOVERABLE_ERROR);
   }
 }
 
 /**
- * Decode an exception, especially to retrive the correct caller.
+ * Decode an exception, especially to retrieve the correct caller.
  *
  * @param $exception
  *   The exception object that was thrown.
@@ -130,6 +131,7 @@ function _drupal_decode_exception($exception) {
     '%file' => $caller['file'],
     '%line' => $caller['line'],
     'severity_level' => LOG_ERR,
+    '%backtrace' => print_r(debug_backtrace(), TRUE),
   );
 }
 
@@ -209,7 +211,8 @@ function _drupal_log_error($error, $fatal = FALSE) {
     $number++;
   }
 
-  watchdog('php', '%type: !message in %function (line %line of %file).', $error, $error['severity_level']);
+  $error['!displayed_backtrace'] = $fatal ? '<pre>' . check_plain($error['%backtrace']) . '</pre>' : '';
+  watchdog('php', '%type: !message in %function (line %line of %file) !displayed_backtrace', $error, $error['severity_level']);
 
   if ($fatal) {
     drupal_add_http_header('Status', '500 Service unavailable (with message)');
@@ -243,7 +246,7 @@ function _drupal_log_error($error, $fatal = FALSE) {
         $class = 'status';
       }
 
-      drupal_set_message(t('%type: !message in %function (line %line of %file).', $error), $class);
+      drupal_set_message(t('%type: !message in %function (line %line of %file). The site error log may contain more detailed information.', $error), $class);
     }
 
     if ($fatal) {
