私のローカル環境では、すべてのログ(すべてのフラグ)をブラウザのコンソール(BrowserConsoleHandler
)に移動し、次にデフォルトのStreamHandler
にします。 エラーやその他の重要なメッセージを電子メールに送信してデータベースに保存するか、ログファイルに失敗した場合はデフォルトでStreamHandler
LaravelグローバルミドルウェアでMonologを設定する
これをグローバルに設定したいのですが次のようになり、私が作成したミドルウェア、:
<?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);
}
}
これは(メッセージがコンソールに示されていない、唯一のログファイルに保存されている)は動作しません。ここで明らかなように、関数のスコープ内でのみ変更されるため、私が把握できないのは、この新しいハンドラについてファサードに知ってもらう方法です。私はbootstrap/app.php
でそれを行うことができることを知っていますが、環境を取得するために早期にではありませんか?また、ログをデータベースに保存する必要がある場合は、すでに接続されている必要があります。