[英]Laravel log file permission problems
如果在运行php artisan
命令时出现错误,日志文件将像这样创建:
-rw-rw-r-- 1 user www-data 2,2K Jul 28 18:08 laravel-2019-07-28.log
如果通过网络浏览器使用应用程序时出现错误,日志文件将如下创建:
-rw-r--r-- 1 www-data www-data 2,2K Jul 28 16:10 laravel-2019-07-28.log
www-data 创建原始文件后,如果php artisan
命令出现错误,则会抛出错误Permission denied
因为无法写入日志
有没有办法为新创建的文件设置默认 chmod,以便它们始终具有组的rw
或者你们有其他一些解决方案
要重现此问题:
php artisan make:xy
-> 这将产生错误并创建一个 .log 文件为此苦苦挣扎了很长时间,并想知道与 OP 相同的事情,后者问:
有没有办法为新创建的文件设置默认 chmod,以便它们始终具有组的 rw
答案是肯定的。
在config/logging.php
我添加了permission => 0666
,这是我在Laravel 文档中找到的,所以我的日常日志的配置现在看起来像这样:
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
'permission' => 0666,
],
需要明确的是, 0664
已经足以将组权限设置为rw
,但这仍然会导致权限错误。
0666
为我解决了权限冲突。 希望这可以帮助某人!
在我的项目中,我定义了一个自定义记录器来解决这个问题,该记录器创建一个到达用户名的日志文件。
在app/Logging/UserNamedLogger.php
上创建自定义记录器:
<?php namespace App\\Logging; use Monolog\\Handler\\RotatingFileHandler; use Monolog\\Handler\\SyslogHandler; use Monolog\\Logger; class UserNamedLogger { /** * Create a custom Monolog instance. * * @param array $config * @return \\Monolog\\Logger */ public function __invoke(array $config) { $logger = new Logger('UserNamedLogger'); // Configure Monolog to log on user named log files $filename = storage_path('logs/laravel-'. posix_getpwuid(posix_geteuid())['name'] .'.log'); $rotatingHandler = new RotatingFileHandler($filename); $logger->pushHandler($rotatingHandler); return $logger; } }
编辑config/logging.php
配置文件:
在'channels'
键中,添加您的自定义记录器:
'named' => [
'driver' => 'custom',
'via' => App\Logging\UserNamedLogger::class,
],
并将默认记录器更改为named
通道:
'default' => env('LOG_CHANNEL', 'named'),
现在,每次您的工匠(或计划的作业)运行时,它都会登录到您的 www 服务器所做的不同文件。 这解决了权限问题。
Imo,这应该是 Laravel 日志记录的默认行为。
更改 /var/www 文件夹的所有者:
sudo chown www-data:www-data /var/www
(如果您的项目在 /var/www 文件夹下)
如果您需要为不同的用户(如root
执行此操作,您可以将 www-data 替换为相应的用户级别。
对于那些不想要任何额外代码的人,只需通过命令行/终端进入 laravel 存储文件夹并运行以下 3 个命令:
设置默认组 www-data
find logs -type d -exec chgrp www-data {} +
设置当前目录中创建的所有新文件和子文件夹继承目录的组
find logs -type d -exec chmod g+s {} +
如果用户创建一个文件,它将具有 rw-rw-r 权限
sudo setfacl -R -d -m u::rw logs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.