Writing to Laravel with Monolog \ Handler \ BrowserConsoleHandler

How can I change the Laravel 5 log to Monolog\Handler\BrowserConsoleHandler?

Which does not work in Laravel 5, but works in a stand-alone PHP file:

use Illuminate\Support\Facades\Log;    
use Monolog\Handler\BrowserConsoleHandler;
use Monolog\Logger;

// create a log channel
$log = Log::getMonolog();
// $log = new Logger('Testlogger'); //doesn't make any difference
$log->pushHandler(new BrowserConsoleHandler(\Psr\Log\LogLevel::INFO));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

All that happens is that my logs appear in the log file but do not get into the browser. If I try the code in a single PHP file without a frame, it works, so I assume this is a Laravel problem.

Firebug FirePHP $log->pushHandler(new FirePHPHandler()); BrowserConsoleHandler, , , , .
BrowserConsoleHandler, , JavaScript , .

, - BrowserConsoleHandler Laravel? ?

+4
1

xdebug , , , :

BrowserConsoleHandler script PHP register_shutdown_function(). Laravel . , script, BrowseConsoleHandler, , .

Middleware (http://laravel.com/docs/5.0/middleware), .

/Http/Middleware/LogBrowserConsole.php:

<?php
namespace App\Http\Middleware;

use Illuminate\Contracts\Routing\Middleware;
use Illuminate\Support\Facades\Log;
use Monolog\Handler\BrowserConsoleHandler;

class LogBrowserConsole implements Middleware {

  public function handle($request, \Closure $next)
  {
    // add BrowserConsoleHandler to Laravel Logger
    $log = Log::getMonolog();
    $log->pushHandler(new BrowserConsoleHandler(\Psr\Log\LogLevel::INFO));

    // invokes all your stuff like it would do without the middleware but with the new logger
    $response = $next($request);

    // after the request is done we care about the log entries
    $handlers = $log->getHandlers();

    $scriptSnippet = "";
    foreach($handlers as $handler){ // only handle BrowserConsoleHandler
        if($handler instanceof BrowserConsoleHandler){
            ob_start(); //start output buffer so we can save echo to variable
            $handler->send(); // create the scriptSnipped
            $scriptSnippet .= ob_get_clean();
        }
    }

    // write scriptSnippet to end of response content
    $content = $response->getContent();
    $response->setContent($content.$scriptSnippet);

    return $response;
  }
}

/Http/Kernel.php:

protected $routeMiddleware = [
    'log.browserconsole' => 'App\Http\Middleware\LogBrowserConsole'
];

/Http/routes.php:

Route::get('test', ['middleware' => 'log.browserconsole', 'uses'=>'TestController@test']);

, Middleware ,

protected $middleware = [
'App\Http\Middleware\LogBrowserConsole'
];

/Http/Kernel.php.

Route::get('test', 'TestController@test');


Log::debug() .. ( LogHandler, ), script, BrowserConsoleHandler, .

, \Psr\LogLevel::INFO /Http/Middleware/LogBrowserConsole .

+3

All Articles