Deployerを利用してLaravelをデプロイするとデプロイユーザーの設定によってログファイルのPermissionエラーが発生します。
サーバーでの対応
ユーザーのGroup設定やファイルが作成する時のディフォルトPermissionの設定を変える等で対応はできると思いますが、ユーザーの設定ができないサーバーを利用していると難しいと思います。また、設定が面倒と考える方もいると思います。
ConsoleとHttpのログファイルを分ける
logging.phpのtapの設定を行います。
config/logging.php
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
'tap' => [App\Logging\SapiLogTap::class],
],
ファイル名を分けるクラースを作成します。
app/Loggin/SapiLogTab.php
<?php
namespace App\Logging;
use Monolog\Handler\RotatingFileHandler;
/**
* ログファイルを出力する
*/
class SapiLogTap
{
/**
* ログファイル名にインターフェイスの型を入れる
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof RotatingFileHandler) {
// ログハンドラーがRatationFileHandlerの場合
// PHPの間のインターフェイスの型を取得
$sapi = php_sapi_name();
// ファイルのフォーマットを定義
$handler->setFilenameFormat("{filename}-$sapi-{date}", 'Y-m-d');
}
}
}
}
ファイルのPermissionの変更
設定ファイルの修正でできるようです(検証しておりません)。参考
config/logging.php
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
'permission' => 0664, // this line lets the file owner to be www-data:www-data
],