Try to not run into the white page of death and still log something in the web server error log

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
Morris Jobke 2018-06-29 11:22:05 +02:00
parent eded07f28f
commit 478b95cc20
No known key found for this signature in database
GPG Key ID: FE03C3A163FEDE68
2 changed files with 21 additions and 5 deletions

View File

@ -50,8 +50,12 @@ try {
try { try {
OC_Template::printErrorPage($ex->getMessage(), $ex->getHint(), 503); OC_Template::printErrorPage($ex->getMessage(), $ex->getHint(), 503);
} catch (Exception $ex2) { } catch (Exception $ex2) {
try {
\OC::$server->getLogger()->logException($ex, array('app' => 'index')); \OC::$server->getLogger()->logException($ex, array('app' => 'index'));
\OC::$server->getLogger()->logException($ex2, array('app' => 'index')); \OC::$server->getLogger()->logException($ex2, array('app' => 'index'));
} catch (Throwable $e) {
// no way to log it properly - but to avoid a white page of death we try harder and ignore this one here
}
//show the user a detailed error page //show the user a detailed error page
OC_Template::printExceptionErrorPage($ex, 500); OC_Template::printExceptionErrorPage($ex, 500);

View File

@ -358,9 +358,21 @@ class OC_Template extends \OC\Template\Base {
$content->assign('requestID', $request->getId()); $content->assign('requestID', $request->getId());
$content->printPage(); $content->printPage();
} catch (\Exception $e) { } catch (\Exception $e) {
try {
$logger = \OC::$server->getLogger(); $logger = \OC::$server->getLogger();
$logger->logException($exception, ['app' => 'core']); $logger->logException($exception, ['app' => 'core']);
$logger->logException($e, ['app' => 'core']); $logger->logException($e, ['app' => 'core']);
} catch (Throwable $e) {
// no way to log it properly - but to avoid a white page of death we send some output
header('Content-Type: text/plain; charset=utf-8');
print("Internal Server Error\n\n");
print("The server encountered an internal error and was unable to complete your request.\n");
print("Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.\n");
print("More details can be found in the server log.\n");
// and then throw it again to log it at least to the web server error log
throw $e;
}
header('Content-Type: text/plain; charset=utf-8'); header('Content-Type: text/plain; charset=utf-8');
print("Internal Server Error\n\n"); print("Internal Server Error\n\n");