diff --git a/src/Monolog/Handler/BrowserConsoleHandler.php b/src/Monolog/Handler/BrowserConsoleHandler.php
index 45b54697..86a59a79 100644
--- a/src/Monolog/Handler/BrowserConsoleHandler.php
+++ b/src/Monolog/Handler/BrowserConsoleHandler.php
@@ -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 '';
- } else {
- echo self::generateScript();
+ if ($format === 'html') {
+ self::writeOutput('');
+ } 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();