以前にLaravel5.5 ConsoleとHttpのログファイルを分けるという記事を投稿しましたが、Laravel5.6でログ周りの機能が刷新されて使えなくなってしまいました。
Laravel5.6以降でもログファイルの切り分けできるようにしました。
ログの設定ファイル
config/logger.php
なる設定ファイルが新たに追加されました。
詳細は公式ドキュメントやソースコードを参照。
https://readouble.com/laravel/5.7/ja/logging.html
コマンドのログ、ウェブアクセスのログを分ける
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
'tap' => [App\Logging\CustomFilenames::class],
],
],
stack
チャンネルに daily
を指定して、 daily
チャンネルに tap
配列にクラスを指定することでMonologのカスタマイズが簡単に行えます。
新たにカスタマイズ用のディレクトリとファイルを作成します。
$ mkdir app/Logging
$ touch app/Logging/CustomFilenames.php
$ open $_
app/Logging/CustomFilenames.php
<?php
namespace App\Logging;
use Monolog\Handler\RotatingFileHandler;
/**
* 実行ユーザー毎にログファイルを出力する
*/
class CustomFilenames
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof RotatingFileHandler) {
$sapi = php_sapi_name();
$handler->setFilenameFormat("{filename}-$sapi-{date}", 'Y-m-d');
}
}
}
}
こんな感じにログファイルが出力されます。
- storage/logs/laravel-cli-2018-09-22.log
- storage/logs/laravel-cli-server-2018-09-22.log
- storage/logs/laravel-apache-2018-09-22.log