2011-11-23 140 views
12

我在發佈我的問題之前搜索了很多。我沒有找到明確的答案,所以在這裏。Symfony 2:登錄到特定文件

我想將消息記錄在與dev.log或prod.log不同的日誌文件中。我的意思是一個不會被Symfony核心信息所迷惑的文件。我聽說過獨角獸中的記錄器和處理器,但它不是很清楚。

如何從我的控制器,型號到特定的日誌文件記錄消息?

+3

可能重複:http://stackoverflow.com/questions/8169114/how-to-write-logs-from-one-service-into-separate-file –

+1

重複的這ISS糾結,因爲你的鏈接只是解決方案的一部分。我試圖在app/config/config.yml中添加這個服務,但沒辦法讓它工作。目前沒有創建日誌文件。 – frinux

回答

22

您必須將信息添加到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'); 
+1

感謝您的回答,但是對於NetBeans,我得到一個錯誤:[@ my_service.logger_handler]爲了使它工作我不得不添加引號:[「@ my_service.logger_handler」]希望它會有所幫助。 – Ashbay

+0

對我來說,它只在我將它添加到服務之下後才起作用,而不是直接在yml文件中 – Andreas

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>