symfony - 在 symfony 4 中部署期间获取所有独白文件路径
问题描述
我在 symfony 4.4 中使用 monolog 和 apache http 服务器。日志记录工作正常。但我有一个问题。
在 prod 环境中创建了以下日志文件:
- 文件 prod.log 文件权限为770,用户权限“user1”和组权限“www-data”
- 文件 prod_deprecations.log 文件权限为644,用户权限“www-data”和组权限“www-data”
- 文件 prod_errors.log 文件权限为666,用户权限“www-data”和组权限“www-data”
如您所见,日志文件的文件权限、用户权限和组权限是不同的。
我想实现所有三个日志文件都具有与 prod.log 相同的文件权限。
我在 symfony 命令中使用自写的部署脚本。在部署期间,还会创建 prod.log。但不是其他两个文件。
现在我的想法是在部署期间生成所有日志文件。因此我在部署期间需要所有独白文件路径。
是否有 symfony 机制来获取所有独白日志文件路径(例如 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
解决方案
这是我自己解决的方法。
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
...
}
});
}
}
推荐阅读
- powershell - Invoke-Sqlcmd - 如何向包含冒号的 SQL 提供变量
- javascript - .html 仅返回内部内容
- javascript - 如何计算keyup的最终金额
- java - 访问rest资源时keycloak 403禁止错误,其中评估api显示允许
- laravel - Laravel Solarium 如何将 csv 文件添加到 Solr 核心?
- azure - 从 Xamarin.forms 将数据保存到 Azure 时如何解决超时异常
- xml - 微软构建。扩展标准 xsd 架构
- python - 如何在Python中根据条件删除列表元素
- elasticsearch - Elasticsearch curl从需要departmentCityId和destinationCountryId的查询中获取所有旅游ID
- python - 使用 python 和 csv 文件创建热图