gpt4 book ai didi

Laravel日志文件权限问题

转载 作者:行者123 更新时间:2023-12-03 16:03:40 27 4
gpt4 key购买 nike

如果在运行php artisan命令时出现错误,则将按以下方式创建日志文件:

 -rw-rw-r-- 1 user www-data 2,2K Jul 28 18:08 laravel-2019-07-28.log

如果通过Web浏览器使用应用程序时出现错误,则将按以下方式创建日志文件:
-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或者你们有其他解决方案

重现此问题:
  • 删除所有存储/日志/*.log文件
  • 调用一些不存在的php artisan命令,例如:php artisan make:xy->这将导致错误并创建一个.log文件
  • 浏览器/logout中的
  • 调用路由->这将尝试写入相同的日志文件,并会抛出一个错误,即无法写入日志“权限被拒绝”
  • 最佳答案

    在我的项目中,我解决了定义自定义记录器的问题,该记录器创建了到达用户名的日志文件。

  • 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 channel :
        'default' => env('LOG_CHANNEL', 'named'),

    现在,每当您的技术人员(或计划的工作)运行时,它将登录到与www服务器不同的文件。这样解决了权限问题。

    Imo,这应该是Laravel日志记录的默认行为。

    关于Laravel日志文件权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57242982/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com