MonologBundle ghi lại mọi thứ bằng cách sử dụng cùng một trình xử lý cho toàn bộ khung công tác. Điều đó có nghĩa là nếu một trong các dịch vụ của bạn cần đăng nhập vào các trình xử lý khác nhau, bạn nên tạo Logger/Handler của riêng bạn và đưa vào dịch vụ của bạn.
Đây có thể là một ví dụ cấu hình (trong yaml):
services:
my_logger:
class: Symfony\Bridge\Monolog\Logger
arguments: [soap]
calls:
- [pushHandler, [@my_handler]]
my_handler:
class: Monolog\Handler\StreamHandler
# 200 = INFO, see Monolog::Logger for the values of log levels
arguments: [%kernel.root_dir%/%kernel.environment%.soap.log, 200]
soap_service:
class: Your\Soap\Client
arguments: [@my_logger]
Tôi hy vọng điều này làm rõ nó.
Cập nhật: như của symfony 2.1, bạn cũng có thể cấu hình những kênh nhận mà xử lý, vì vậy bạn cách khác có thể làm một cái gì đó như thế này:
services:
soap_service:
class: Your\Soap\Client
arguments: [@logger]
tags:
- { name: monolog.logger, channel: soap }
nào tạo ra một kênh phim truyền hình mới (ví dụ logger dụ nhận tất cả các bộ xử lý), sau đó để cấu hình bộ xử lý khác nhau cho kênh này:
monolog:
handlers:
main:
type: stream
path: %kernel.root_dir%/%kernel.environment%.log
level: error
channels: [!soap]
soap:
type: stream
path: %kernel.root_dir%/%kernel.environment%.soap.log
level: info
channels: [soap]
này có nghĩa là xử lý chính sẽ nhận được tất cả mọi thứ nhưng kênh xà phòng, và xử lý xà phòng sẽ chỉ nhận được cái kênh ap. Bạn cũng có thể xóa khóa channels
trên trình xử lý chính nếu bạn muốn tệp nhật ký chính của mình có mọi thứ, nhưng cũng chỉ có bản sao của nhật ký xà phòng. Điều này mang lại rất nhiều tính linh hoạt và khi bạn thấy các kênh là một mảng để bạn có thể liệt kê các kênh bạn muốn hoặc sử dụng ký hiệu danh sách đen !name
để loại trừ một số và bao gồm mọi thứ khác.
Tôi rất thích câu trả lời. Tôi đã hỏi một câu hỏi tương tự vài tuần trước đây: http://stackoverflow.com/questions/7714790/custom-monolog-logging-channel-in-symfony2-command – Reuven