В моей локальной среде я хочу, чтобы все журналы (все флаги) переходили в консоль браузера (BrowserConsoleHandler
), а затем по умолчанию StreamHandler
. В процессе производства я хочу, чтобы ошибки и другие критические сообщения отправлялись на электронную почту, затем сохранялись в базе данных или (если не удавалось) в файл журнала (по умолчанию StreamHandler
)Настроить Монолог в глобальном промежуточном программном обеспечении Laravel
Я хочу установить это в глобальном среднего изделия, которые я создал, который выглядит, как это сейчас:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Log;
use Monolog\Logger;
use Monolog\Handler\BrowserConsoleHandler;
class GlobalConfig
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Get Monolog instance
$monolog = Log::getMonolog();
// In local environment the logs will be shown on browser
if (App::environment('local')) {
// Show logs in browser console
$monolog -> pushHandler(new BrowserConsoleHandler());
} else {
// Here we set up for production
}
Log::debug("Browser handler working");
return $next($request);
}
}
Это не работает (сообщение сохраняется в файле журнала только не показан на консоли). Что я не могу понять, так это то, как позволить фасад Log
знать об этом новом обработчике, потому что здесь, как очевидно, вещи изменяются только в пределах области действия. Я знаю, что смогу это сделать в bootstrap/app.php
, но разве рано ли это создавать среду? Кроме того, если мне нужно сохранить журналы в базе данных, он должен быть подключен, я думаю,