【问题标题】:symfony environment config filessymfony 环境配置文件
【发布时间】:2017-02-06 08:39:58
【问题描述】:

我使用 fosrestBundle 和 monolog 记录器来创建自定义日志。 我在 config_dev.yml 中添加了这个配置:

monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      nested
        nested:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
        console:
            type:  console
        myCustomLog:
            type:   stream
            path: "%kernel.logs_dir%/myCustomLog%kernel.environment%.log"
            channels: [myCustomLog]

所以我在我的其他环境配置文件(config_prod.yml、config_qualif.yml ...)中做了同样的事情

问题是可能没有使用 config_prod 或 config_qualif。

我遇到了这个错误:

PHP Fatal error:  Uncaught Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException: You have requested a non-existent service "monolog.logger.myCustomLog". in /var/www/myWebSite/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ContainerBuilder.php:816\nStack trace:\n#0 

我在 config.yml 文件中移动了我的 monolog conf,它适用于所有环境,但这不是一个好的解决方案。

你能帮我理解如何正确使用环境配置文件吗,因为我不确定我做的是否好?而且我不确定 fosrestbundle 使用正确的环境配置文件。

对于 prod 环境,我的 apache conf 看起来像这样:

ServerAdmin webmaster@localhost
DocumentRoot /var/www/myWebSite/web
<IfModule dir_module>
    DirectoryIndex app.php
</IfModule>

<Directory /var/www/myWebSite/web>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    <IfModule mod_rewrite.c>
        Options +FollowSymlinks
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ /app.php [QSA,L]
    </IfModule>
</Directory>

对于 qualif 环境,重写规则是:

        RewriteRule ^(.*)$ /app_qualif.php [QSA,L]

在 app.php 我有这一行:

$kernel = new AppKernel('prod', false);

在 app_qualif.php 我有这一行:

$kernel = new AppKernel('qualif', false);

感谢您的帮助

【问题讨论】:

    标签: symfony


    【解决方案1】:

    好的,我解决了这个问题。

    配置文件工作正常。

    问题来自命令行系统。当我调用命令时,我使用的是这种语法:

    php app/console app:my-command
    

    但是使用这个,symfony 不知道要使用的环境配置。 现在我用这种语法启动我的命令:

    php app/console --env=prod app:my-command
    

    【讨论】:

      【解决方案2】:

      您为独白设置了自定义类别频道。您应该注册一个服务来处理它。 你有两个解决方案:

      1) 创建您自己的服务并将其标记为独白通道处理程序,如下所述: http://symfony.com/doc/current/reference/dic_tags.html#dic-tags-monolog

      2) 从 monolog 2.4 开始,您可以直接在 config.yml 中将新频道注册到 monolog :

      monolog:
          channels: ["myCustomLog"]
          handlers:
              main:
                  type:         fingers_crossed
                  action_level: error
                  handler:      nested
              nested:
                  type:  stream
                  path:  "%kernel.logs_dir%/%kernel.environment%.log"
                  level: debug
              console:
                  type:  console
              myCustomLog:
                  type:   stream
                  path: "%kernel.logs_dir%/myCustomLog%kernel.environment%.log"
                  channels: [myCustomLog]
      

      Monolog 将自动创建服务 monolog.looger.mycustomlog

      【讨论】:

      • 这并不能回答真正的问题:为什么不使用 config_prod 或 config_qualif?您的解决方案有效,但如果我想要根据环境不同的级别,我不能这样做
      猜你喜欢
      • 2015-06-02
      • 2019-10-17
      • 2012-11-25
      • 2019-12-03
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多