Symfony 2:登录到特定文件

Posted

技术标签:

【中文标题】Symfony 2:登录到特定文件【英文标题】:Symfony 2 : Log into a specific file 【发布时间】:2012-01-04 16:56:41 【问题描述】:

在发布我的问题之前,我进行了很多搜索。我没有找到明确的答案,所以在这里。

我想将消息记录在另一个日志文件中,如 dev.log 或 prod.log。我的意思是一个不会被 Symfony 核心消息污染的文件。在monolog中听说过logger和handler,但不是很清楚。

如何将来自控制器、模型的消息记录到特定的日志文件中?

【问题讨论】:

可能重复:***.com/questions/8169114/… 这是重复的问题,因为您的链接只是解决方案的一部分。我试图在 app/config/config.yml 中添加此服务,但无法使其工作。到目前为止没有创建日志文件。 【参考方案1】:

您必须将信息添加到 services.yml 文件,而不是 config.yml 文件:

所以在services.ymlservices.xml)你有

my_service.logger:
    class:     Symfony\Bridge\Monolog\Logger
    arguments: [app]
    calls:
        - [pushHandler, [@my_service.logger_handler]]

my_service.logger_handler:
    class:     Monolog\Handler\StreamHandler       
    arguments: [%kernel.logs_dir%/%kernel.environment%.admin.log, 200]

在你使用的控制器动作中:

$logger = $this->get('my_service.logger');

【讨论】:

感谢您的回答,但对于 NetBeans,我在使用时遇到了错误:[@my_service.logger_handler] 为了使其正常工作,我必须添加引号:["@my_service.logger_handler"] 希望如此会有帮助的。 对我来说它只有在我将它添加到 services: 之后才有效,而不是直接在 yml 文件中 此答案应设为最佳答案。小心引号【参考方案2】:

上面的答案对我来说非常好。我不得不调整它,因为我的配置是 xml 而不是 yaml。

这是完全相同的配置,但使用的是 xml。

<service id="my_service.logger" class="Symfony\Bridge\Monolog\Logger">
    <argument type="string">app</argument>
    <call method="pushHandler">
        <argument type="service" id="my_service.logger_handler" />
    </call>
</service>
<service id="my_service.logger_handler" class="Monolog\Handler\StreamHandler">
    <argument>type="string">%kernel.logs_dir%/%kernel.environment%.license.log</argument>
    <argument type="string">200</argument>
</service>

【讨论】:

以上是关于Symfony 2:登录到特定文件的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2.5.6 打破登录?

无法从 Symfony 2 上的内存登录中注销

Symfony 安全重定向到登录页面

Symfony - 如何将用户重定向到登录后访问的最后一个页面?

Symfony 3,一个应用程序中的 2 个防火墙

Symfony 2:将特定通道/处理程序的记录器注入服务