在symfony 4中部署期间获取所有monolog文件路径

在symfony 4中部署期间获取所有monolog文件路径,symfony,logging,monolog,Symfony,Logging,Monolog,我使用Symfony4.4中的monolog和ApacheHTTP服务器。日志记录工作正常。但我有个问题 在prod环境中创建了以下日志文件: 文件prod.log,具有文件权限770、用户权限user1和组权限www数据 文件prod_deprecations.log,具有文件权限644、用户权限www数据和组权限www数据 具有文件权限666、用户权限www数据和组权限www数据的文件prod_errors.log 如您所见,日志文件中的文件权限、用户权限和组权限是不同的 我希望实现所有三个

我使用Symfony4.4中的monolog和ApacheHTTP服务器。日志记录工作正常。但我有个问题

在prod环境中创建了以下日志文件:

文件prod.log,具有文件权限770、用户权限user1和组权限www数据 文件prod_deprecations.log,具有文件权限644、用户权限www数据和组权限www数据 具有文件权限666、用户权限www数据和组权限www数据的文件prod_errors.log 如您所见,日志文件中的文件权限、用户权限和组权限是不同的

我希望实现所有三个日志文件都具有与prod.log相同的文件权限

我在symfony命令中使用自编的部署脚本。在部署过程中,还会创建prod.log。但不是其他两个文件

现在我的想法是在部署期间生成所有日志文件。因此,在部署期间,我需要所有的monolog文件路径

是否有一个symfony机制来获取例如prod环境的所有monolog日志文件路径?我怎样才能做到这一点?提前谢谢你的帮助

以下是monolog配置文件monolog.yaml的摘录:

monolog:
    handlers:
        nested:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
        deprecation:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%_deprecations.log"

        error:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%_errors.log"
            level: error
            max_files: 10
            action_level: error

这就是我自己解决问题的方法

namespace App\Service;

// ...

use Symfony\Component\Yaml\Yaml;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;

class LogFilesGenerator
{
    private $params;

    public function __construct(ContainerBagInterface $params)
    {
        $this->params = $params;
    }

    public function createEmptyLogFiles($output)
    {
        $appEnv = $this->params->get('kernel.environment');
        $kernelLogsDir = $this->params->get('kernel.logs_dir');
        $kernelProjectDir = $this->params->get('kernel.project_dir');

        $filePath = realpath($kernelProjectDir.'/config/packages/'.$appEnv.'/monolog.yaml');

        $monologFileContent = Yaml::parseFile($filePath);
        $monologFileHandlers = $monologFileContent['monolog']['handlers'];


        array_walk_recursive($monologFileHandlers, function($value, $key) use ($appEnv, $kernelLogsDir) {
            if($key === 'path') {
                $path = $value;
                $path = str_replace('%kernel.environment%', $appEnv, $path);
                $path = str_replace('%kernel.logs_dir%', $kernelLogsDir, $path);
                // next step create empty files with $path 
                ...
            }
        });
    }
}

现在我知道多一点。在服务器上部署symfony期间已生成prod.log文件。这就是为什么用户权限不同于其他两个文件,这两个文件仅在用户访问网页时发生错误并导致错误时创建。所以我有下面的问题。是否可以将所有日志文件创建为空文件,这些文件在symfony命令的服务器部署期间在monolog.yaml中定义?对不起,我使用它进行部署和修复权限,我不熟悉symfony cli,但我认为这是可以做到的。由于你评论中的信息非常相关,你应该回答这个问题以使其更准确。谢谢你的评论。我已经更新了我的问题描述和问题。等等,你是说命令?我误解了,以为你指的是symfony二进制文件。尽管如此,为了能够以另一个用户的身份写入目录,它或者具有打开权限,或者执行部署的用户具有特权。你不能跑chmod吗?我认为我们应该关注脚本,而不是独白配置。但是,如果日志文件不存在,symfony应该自动创建日志文件。您是否遇到了一些问题?我在部署期间通过symfony命令创建了一个chmod。这就是prod.log拥有文件权限770的原因。但其他日志文件仅在用户访问网页并发生错误时才生成。但是,用户权限是www数据。我不想要这个。这就是为什么我在部署过程中搜索一种获取所有monolog日志文件路径的通用方法,以生成所有日志文件,并将其作为具有用户权限user1的空文件。