public static function run(array $config = []) {
		$defaults = ['trapErrors' => false, 'convertErrors' => true];

		if (static::$_isRunning) {
			return;
		}
		static::$_isRunning = true;
		static::$_runOptions = $config + $defaults;

		$trap = function($code, $message, $file, $line = 0, $context = null) {
			$trace = debug_backtrace();
			$trace = array_slice($trace, 1, count($trace));
			static::handle(compact('type', 'code', 'message', 'file', 'line', 'trace', 'context'));
		};

		$convert = function($code, $message, $file, $line = 0, $context = null) {
			throw new ErrorException($message, 500, $code, $file, $line);
		};

		if (static::$_runOptions['trapErrors']) {
			set_error_handler($trap);
		} elseif (static::$_runOptions['convertErrors']) {
			set_error_handler($convert);
		}
		set_exception_handler(static::$_exceptionHandler);
	}