2012-07-20 2 views
1

Symfony2를 배우기 시작했고 현재는 별도로 기록하려는 명령을 다루고 있습니다.심포니 2의 커스텀 로거 및 모노로그 포맷터 - services.xml 구성

내 목표는 사용자 지정 로거를 사용하여 내 명령에 대한 깨끗한 로그 파일을 얻는 것입니다. XML 구성 파일을 사용하는 프로젝트에서 작업하지만 일부 .yml 매개 변수 및 옵션을 변환하는 방법을 얻지 못합니다.

나는 How to write logs from one service into separate file?을 읽고 작동하는 별도의 로그 파일을 가지고 있습니다.

<?xml version="1.0" ?> 
<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> 

    <services> 
     <service id="myproject_mycommand.logger" class="Symfony\Bridge\Monolog\Logger"> 
      <argument>myproject_mycommand.logger</argument> 
      <call method="pushHandler"> 
       <argument type="service" id="myproject_mycommand.logger_handler" /> 
      </call> 
     </service> 

     <service id="myproject_mycommand.logger_handler" class="Monolog\Handler\StreamHandler"> 
      <argument>%kernel.logs_dir%/my_custom_file_log.log</argument> 
     </service> 
    </services> 
</container> 

내가 "[%% 날짜 %%] %% 메시지가 \ n %%"

내가 생각의 독백 라인 포맷으로 단지 내 원하는 필드를 전달하는 식으로 뭔가를 시도하고 Symfony2 : use Processors while logging in different files을 찾고 후 내가 좋아하는 뭔가를 추가해야 할 것 :

container 
... 
    xmlns:monolog="http://symfony.com/schema/dic/monolog" 
... 

<service id="myproject_mycommand.logger.formatter" class="Monolog\Formatter\LineFormatter"> 
    <argument>"[%%datetime%%] %%message%%\n"</argument> 
</service> 

을하지만 난하지 않습니다 xml 파일에서이 간단한 포맷터를 구성하는 방법.

도움 주셔서 감사합니다.

답변

1

포맷터를 만들고 FormatterInterface에서 확장하고 formatformatBatch을 구현해야합니다.

그런 다음 서비스 정의에 대해의

<service id="myproject_mycommand.logger.formatter" class="MyBundle\Formatter\XmlFormatter"> 
    <argument>some arguments if you need one</argument> 
</service> 

<service id="myproject_mycommand.logger_handler" class="Monolog\Handler\StreamHandler"> 
    <argument>%kernel.logs_dir%/my_custom_file_log.log</argument> 
    <call method="setFormatter"> 
     <argument type="service" id="myproject_mycommand.logger.formatter"/> 
    </call>  
</service> 

를 추가합니다. 포맷하는 방법에 대한 아이디어는 다른 포맷터의 예제를 모노 그래프 번들 소스에서 확인할 수 있습니다.