1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-05 20:57:36 +02:00

Allow BrowserConsoleHandler to be overridden for better integration in frameworks

This commit is contained in:
Jordi Boggiano
2016-03-01 16:39:55 +00:00
parent 481fc4cfa1
commit 1048aa4a59

View File

@@ -46,9 +46,9 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
self::$records[] = $record;
// Register shutdown handler if not already done
if (PHP_SAPI !== 'cli' && !self::$initialized) {
if (!self::$initialized) {
self::$initialized = true;
register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send'));
$this->registerShutdownFunction();
}
}
@@ -58,26 +58,16 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
*/
public static function send()
{
$htmlTags = true;
// Check content type
foreach (headers_list() as $header) {
if (stripos($header, 'content-type:') === 0) {
// This handler only works with HTML and javascript outputs
// text/javascript is obsolete in favour of application/javascript, but still used
if (stripos($header, 'application/javascript') !== false || stripos($header, 'text/javascript') !== false) {
$htmlTags = false;
} elseif (stripos($header, 'text/html') === false) {
return;
}
break;
}
$format = self::getResponseFormat();
if ($format === 'unknown') {
return;
}
if (count(self::$records)) {
if ($htmlTags) {
echo '<script>' , self::generateScript() , '</script>';
} else {
echo self::generateScript();
if ($format === 'html') {
self::writeOutput('<script>' , self::generateScript() , '</script>');
} elseif ($format === 'js') {
self::writeOutput(self::generateScript());
}
self::reset();
}
@@ -91,6 +81,50 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
self::$records = array();
}
/**
* Wrapper for register_shutdown_function to allow overriding
*/
protected function registerShutdownFunction()
{
if (PHP_SAPI !== 'cli') {
register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send'));
}
}
/**
* Wrapper for echo to allow overriding
*
* @param string $str
*/
protected static function writeOutput($str)
{
echo $str;
}
/**
* Checks the format of the response
*
* @return string One of 'js', 'html' or 'unknown'
*/
protected static function getResponseFormat()
{
// Check content type
foreach (headers_list() as $header) {
if (stripos($header, 'content-type:') === 0) {
// This handler only works with HTML and javascript outputs
// text/javascript is obsolete in favour of application/javascript, but still used
if (stripos($header, 'application/javascript') !== false || stripos($header, 'text/javascript') !== false) {
return 'js';
} elseif (stripos($header, 'text/html') !== false) {
return 'html';
}
break;
}
}
return 'unknown';
}
private static function generateScript()
{
$script = array();