Laravel 日志通道设置为 single
或 daily
时,会将日志写入到文件,但是 命令行和 FPM 这两个模式运行的用户可能不是同一个(通常是 root 和 www),外加文件的默认权限是 0644
,也就是 rw-r--r--
,所以文件创建后,其它用户是没权限写入的,这可能会导致程序在需要写入日志而出现对文件没有操作权限时,发生严重错误而崩溃。
解决此问题的方法,一是让命令行和 FPM 运行在同一个用户下,二是修改文件权限。
方法一对于我们普通开发者而言,有点麻烦,而方法二就相当简单,只需要修改文件的默认权限即可,并且 Laravel 也给与了方便的设置项 permission
,具体如下:
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
'permission' => 0664,
],
0664
,即 rw-rw-r--
,允许同组其它用户也可以写入。
如果 0664
还不够,就再加到 0666
,允许其它用户也可写入。
另外,在这之前,应该保证 storage
文件夹的权限已经按照 Laravel 的提示进行设置。
Laravel daily log created with wrong permissions - Stack Overflow
How to configure PHP CLI on linux ubuntu to run as www-data? - Server Fault