Qiitaデビューしました。
初めまして、ゆうきゃんです。
メンタル弱いのでツッコミはお手柔らかにお願いします!
初投稿ということで簡単なものをご紹介します。
目的
Laravelのログはデイリーログを指定した場合は下記のように日毎にローテートされます。
storage/logs/laravel-yyyy-mm-dd.log
開発中は自分のタイミングでログが出るのでいいのですが、
本番運用が始まるとバッチ処理のコンソールログとブラウザからのアクセスログが入り混ざってログが読みづらくなってきます。
ということで、やっていくぞ!!
実装
システム全体の起動処理を変更するのでログ設定用のサービスプロバイダを作成します。
$ touch app/Providers/LogServiceProvider.php
app/Providers/LogServiceProvider.php
Illuminate/Log/LogServiceProvider
を元に拡張します。
<?php
namespace App\Providers;
use Illuminate\Log\Writer;
use Illuminate\Log\LogServiceProvider as ServiceProvider;
class LogServiceProvider extends ServiceProvider
{
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureDailyHandler(Writer $log)
{
$log->useDailyFiles(
sprintf("%s/logs/%s.log"
, $this->app->storagePath()
, $this->getFileName()
),
$this->maxFiles(),
$this->logLevel()
);
}
/**
* Logging file name.
*
* @return string
*/
private function getFileName()
{
return 'laravel-' . php_sapi_name();
}
}
config/app.php
config/app.php
へ LogServiceProvider を追記します。
'log' => env('APP_LOG', 'daily'),
'providers' => [
// 追加
App\Providers\LogServiceProvider::class,
],
以上、実装完了です!
結果
storage/logs/laravel-cli-yyyy-mm-dd.log
storage/logs/laravel-cli-server-yyyy-mm-dd.log
storage/logs/laravel-apache-yyyy-mm-dd.log
上記のように各種ログファイルに別れて出力されます。
バージョン
5.4と5.5はこの書き方で動くハズです。
5.3と5.6はログ周りの処理変わってたような気がします。
時間あるときに調べてみます。