mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-06 13:16:39 +02:00
Allow BrowserConsoleHandler to be overridden for better integration in frameworks
This commit is contained in:
@@ -46,9 +46,9 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
|||||||
self::$records[] = $record;
|
self::$records[] = $record;
|
||||||
|
|
||||||
// Register shutdown handler if not already done
|
// Register shutdown handler if not already done
|
||||||
if (PHP_SAPI !== 'cli' && !self::$initialized) {
|
if (!self::$initialized) {
|
||||||
self::$initialized = true;
|
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()
|
public static function send()
|
||||||
{
|
{
|
||||||
$htmlTags = true;
|
$format = self::getResponseFormat();
|
||||||
// Check content type
|
if ($format === 'unknown') {
|
||||||
foreach (headers_list() as $header) {
|
return;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count(self::$records)) {
|
if (count(self::$records)) {
|
||||||
if ($htmlTags) {
|
if ($format === 'html') {
|
||||||
echo '<script>' , self::generateScript() , '</script>';
|
self::writeOutput('<script>' , self::generateScript() , '</script>');
|
||||||
} else {
|
} elseif ($format === 'js') {
|
||||||
echo self::generateScript();
|
self::writeOutput(self::generateScript());
|
||||||
}
|
}
|
||||||
self::reset();
|
self::reset();
|
||||||
}
|
}
|
||||||
@@ -91,6 +81,50 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
|||||||
self::$records = array();
|
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()
|
private static function generateScript()
|
||||||
{
|
{
|
||||||
$script = array();
|
$script = array();
|
||||||
|
Reference in New Issue
Block a user