diff --git a/lib/base.php b/lib/base.php
index 9f21e26279f154b81351ab568e63bf252d27c0be..69685559608100f38a8610962af23b5b8ee40389 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -323,6 +323,10 @@ class OC{
 
 		self::initPaths();
 
+		register_shutdown_function(array('OC_Log', 'onShutdown'));
+		set_error_handler(array('OC_Log', 'onError'));
+		set_exception_handler(array('OC_Log', 'onException'));
+
 		// set debug mode if an xdebug session is active
 		if (!defined('DEBUG') || !DEBUG) {
 			if(isset($_COOKIE['XDEBUG_SESSION'])) {
diff --git a/lib/log.php b/lib/log.php
index 6de99b4ea6bd07977e4f1b8e4de2a13eb1643cac..4bba62cf4b2e08ff3fab88aff932496774f18784 100644
--- a/lib/log.php
+++ b/lib/log.php
@@ -39,4 +39,26 @@ class OC_Log {
 			$log_class::write($app, $message, $level);
 		}
 	}
+	
+	//Fatal errors handler
+	public static function onShutdown(){
+		$error = error_get_last();
+		if($error) {
+			//ob_end_clean();
+			self::write('PHP', $error['message'] . ' at ' . $error['file'] . '#' . $error['line'], self::FATAL);
+		} else {
+			return true; 
+		}
+	}
+	
+	// Uncaught exception handler
+	public static function onException($exception){
+		self::write('PHP', $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(), self::FATAL);
+	}
+
+	//Recoverable errors handler
+	public static function onError($number, $message, $file, $line){
+		self::write('PHP', $message . ' at ' . $file . '#' . $line, self::WARN);
+
+	}
 }