|
|
@@ -11,10 +11,17 @@
|
|
|
|
|
|
namespace Monolog\Handler;
|
|
|
|
|
|
-use Monolog\Formatter\LineFormatter;
|
|
|
use Monolog\Formatter\FormatterInterface;
|
|
|
+use Monolog\Formatter\LineFormatter;
|
|
|
use Monolog\Utils;
|
|
|
|
|
|
+use function count;
|
|
|
+use function headers_list;
|
|
|
+use function stripos;
|
|
|
+use function trigger_error;
|
|
|
+
|
|
|
+use const E_USER_DEPRECATED;
|
|
|
+
|
|
|
/**
|
|
|
* Handler sending logs to browser's javascript console with no browser extension required
|
|
|
*
|
|
|
@@ -29,6 +36,10 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
|
|
/** @var FormattedRecord[] */
|
|
|
protected static $records = [];
|
|
|
|
|
|
+ protected const FORMAT_HTML = 'html';
|
|
|
+ protected const FORMAT_JS = 'js';
|
|
|
+ protected const FORMAT_UNKNOWN = 'unknown';
|
|
|
+
|
|
|
/**
|
|
|
* {@inheritDoc}
|
|
|
*
|
|
|
@@ -65,14 +76,14 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
|
|
public static function send(): void
|
|
|
{
|
|
|
$format = static::getResponseFormat();
|
|
|
- if ($format === 'unknown') {
|
|
|
+ if ($format === self::FORMAT_UNKNOWN) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (count(static::$records)) {
|
|
|
- if ($format === 'html') {
|
|
|
+ if ($format === self::FORMAT_HTML) {
|
|
|
static::writeOutput('<script>' . static::generateScript() . '</script>');
|
|
|
- } elseif ($format === 'js') {
|
|
|
+ } elseif ($format === self::FORMAT_JS) {
|
|
|
static::writeOutput(static::generateScript());
|
|
|
}
|
|
|
static::resetStatic();
|
|
|
@@ -125,25 +136,37 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
|
|
* If Content-Type is anything else -> unknown
|
|
|
*
|
|
|
* @return string One of 'js', 'html' or 'unknown'
|
|
|
+ * @phpstan-return self::FORMAT_*
|
|
|
*/
|
|
|
protected static function getResponseFormat(): string
|
|
|
{
|
|
|
// 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';
|
|
|
- }
|
|
|
- if (stripos($header, 'text/html') === false) {
|
|
|
- return 'unknown';
|
|
|
- }
|
|
|
- break;
|
|
|
+ return static::getResponseFormatFromContentType($header);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return 'html';
|
|
|
+ return self::FORMAT_HTML;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return string One of 'js', 'html' or 'unknown'
|
|
|
+ * @phpstan-return self::FORMAT_*
|
|
|
+ */
|
|
|
+ protected static function getResponseFormatFromContentType(string $contentType): string
|
|
|
+ {
|
|
|
+ // This handler only works with HTML and javascript outputs
|
|
|
+ // text/javascript is obsolete in favour of application/javascript, but still used
|
|
|
+ if (stripos($contentType, 'application/javascript') !== false || stripos($contentType, 'text/javascript') !== false) {
|
|
|
+ return self::FORMAT_JS;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (stripos($contentType, 'text/html') !== false) {
|
|
|
+ return self::FORMAT_HTML;
|
|
|
+ }
|
|
|
+
|
|
|
+ return self::FORMAT_UNKNOWN;
|
|
|
}
|
|
|
|
|
|
private static function generateScript(): string
|