2011-11-23 34 views
12

Tôi đã tìm kiếm rất nhiều trước khi đăng câu hỏi của mình. Tôi không tìm thấy một câu trả lời rõ ràng, vì vậy ở đây nó được.Symfony 2: Đăng nhập vào một tập tin cụ thể

Tôi muốn đăng nhập thư trong một tệp nhật ký khác với tên dev.log hoặc prod.log. Tôi có nghĩa là một tập tin mà sẽ không bị xử lý bởi các thông điệp cốt lõi của Symfony. Tôi nghe nói về logger và handler trong monolog, nhưng nó không rõ ràng lắm.

Làm cách nào để tôi có thể ghi nhật ký từ bộ điều khiển, mô hình vào một tệp nhật ký cụ thể?

+3

có thể trùng lặp: http://stackoverflow.com/questions/8169114/how-to-write-logs-from-one-service-into-separate-file –

+1

xoắn iss này là một bản sao, bởi vì bạn liên kết chỉ là một phần của giải pháp. Tôi đã cố gắng để thêm các dịch vụ này trong app/config/config.yml, nhưng không có cách nào để làm cho nó hoạt động. Không có tệp nhật ký nào được tạo cho đến thời điểm này. – frinux

Trả lời

22

Bạn cần phải thêm các thông tin vào file services.yml, không phải là tập tin config.yml:

Vì vậy, trong services.yml (hoặc services.xml), bạn có

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] 

và trong điều khiển của bạn hành động bạn sử dụng:

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

Cảm ơn câu trả lời của bạn nhưng với NetBeans, tôi gặp lỗi khi sử dụng: [@ my_service.logger_handler] để làm cho nó hoạt động, tôi phải thêm dấu ngoặc kép: ["@ my_service.logger_handler"] Hy vọng nó sẽ giúp ích. – Ashbay

+0

đối với tôi, nó chỉ hoạt động sau khi tôi thêm nó vào dịch vụ :, không trực tiếp trong tệp yml – Andreas

2

Câu trả lời ở trên hoàn toàn phù hợp với tôi. Tôi đã phải thích ứng với nó mặc dù cấu hình của tôi là trong xml và không yaml.

Đây là cấu hình chính xác nhưng sử dụng 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> 
Các vấn đề liên quan