在我的本地环境中,我希望所有日志(所有标志)都进入浏览器的控制台(BrowserConsoleHandler
),然后进入默认的StreamHandler
. 在生产中,我希望将错误和其他关键消息发送到电子邮件,然后存储在数据库中或(如果失败)到日志文件(默认StreamHandler
)
我想在我创建的全局中间件中设置它,现在看起来像这样:
<?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
但现在获得环境不是为时过早吗?另外,如果我需要将日志保存到数据库,它必须已经连接,我猜