📌  相关文章
📜  存储日志 laravel.log" 无法打开:无法打开流:权限被拒绝 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:25:03.863000             🧑  作者: Mango

存储日志 laravel.log 无法打开:无法打开流:权限被拒绝

介绍

在 Laravel 应用程序中,日志文件 laravel.log 默认存储在 storage/logs 目录下。当你在使用 Laravel 时遇到类似 "无法打开流:权限被拒绝" 的错误时,这很可能是因为在尝试写入日志文件时,Laravel 没有足够的权限。

常见原因
  • 没有正确设置权限
  • 没有指定正确的目录
如何解决
命令解决

首先,检查你的 storage/logs 目录是否拥有正确的权限。使用以下命令更改目录的权限:

$ sudo chmod -R 777 storage/logs

这将授予目录及其子目录下所有文件的所有用户读、写和执行权限。如果这解决了问题,我们建议你不要使用 chmod,而是将系统用户添加到与该目录拥有相同权限的用户组中。

$ sudo usermod -a -G www-data $USER
$ sudo chgrp -R www-data storage bootstrap/cache
$ sudo chmod -R ug+rwx storage bootstrap/cache

注意:其中的 www-data 用户是在大多数 web 服务器上用于访问文件的默认用户之一。如果无法确定该用户,请查阅相关文档。

配置文件解决

如果你无法更改目录的权限,则可以在 config/logging.php 文件中更改日志记录器的目录。你需要将以下两个参数之一传递给文件日志记录器:

  • path - 日志文件的存储路径将覆盖默认值。例如,storage/logs/myapp.log
  • permission - 文件权限将覆盖默认值。例如,0664

以下是一个示例:

'default' => env('LOG_CHANNEL', 'stack'),

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single'],
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/myapp.log'),
        'level' => 'debug',
        'permission' => 0777,
    ],
],

请注意,如果目录不存在,将无法成功创建日志文件。在这种情况下,你需要先确保目录存在并具有正确的权限。

总结

出现 "无法打开流:权限被拒绝" 的错误时,Laravel 中的日志文件权限可能不正确。使用 chmod 更改目录的权限或在配置文件中更改日志记录器的参数。在更改权限时,请谨慎操作,并确保在设置完权限后将其还原到最低级别。