symfony环境配置文件

时间:2017-02-06 08:39:59

标签: symfony

我使用fosrestBundle和monolog logger来创建自定义日志。 我在config_dev.yml中添加了这个conf:

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);

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

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

配置文件工作正常。

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

php app/console app:my-command

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

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

答案 1 :(得分:0)

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

1)创建自己的服务并将其标记为monolog通道处理程序,如下所示: 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