在symfony 4的部署过程中获取所有monolog文件路径

问题描述 投票:-2回答:1

我在带有Apache http服务器的symfony 4.4中使用独白。日志记录工作正常。但是我有一个问题。

在产品环境中创建了以下日志文​​件:

  • 具有文件权限770,用户权限“ user1”和组权限“ www-data”]的文件prod.log
  • 具有文件权限644
  • ,用户权限“ www-data”和组权限“ www-data”的文件prod_deprecations.log
  • 具有文件权限666
  • ,用户权限“ www-data”和组权限“ www-data”]的文件prod_errors.log

    如您所见,日志文件的文件权限,用户权限和组权限是不同的。

    并且我想实现所有三个日志文件都具有与prod.log相同的文件权限。

我在symfony命令中使用了自行编写的部署脚本。在部署期间,还会创建prod.log。但没有其他两个文件。

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

是否有一个symfony机制来获取所有monolog日志文件路径(例如prod-environment)?我怎样才能做到这一点?感谢您的提前帮助。

这里是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

我在带有Apache http服务器的symfony 4.4中使用独白。日志记录工作正常。但是我有一个问题。在prod环境中创建了以下日志文​​件:具有文件权限770的文件prod.log,...

symfony logging monolog
1个回答
0
投票

这是我自己解决问题的方式。

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 
                ...
            }
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.