MonologBundle rejestruje wszystko przy użyciu tych samych procedur obsługi dla całego środowiska. Oznacza to, że jeśli jedna z Twoich usług wymaga zalogowania się do różnych programów obsługi, powinieneś stworzyć swój własny Logger/Handler i wprowadzić go do swojej usługi.
ten mógłby być przykładem config (w 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]
Mam nadzieję, że to wyjaśnia to.
Aktualizacja: jak Symfony 2.1, można również określić, które kanały odbierać które teleskopowe, więc można ewentualnie zrobić coś takiego:
services:
soap_service:
class: Your\Soap\Client
arguments: [@logger]
tags:
- { name: monolog.logger, channel: soap }
który tworzy nowy kanał mydła (tj rejestrator instancja odbierający Wszystkie ładowarki), a następnie skonfigurować różne ładowarki dla tego kanału:
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]
oznacza to główny obsługi otrzyma wszystko oprócz kanału mydło, mydło i opiekun otrzyma tylko tak kanał ap. Możesz również usunąć klucz channels
na głównej procedurze obsługi, jeśli chcesz, aby główny plik dziennika miał wszystko, ale miał też kopię tylko dzienników mydła oddzielnie. Zapewnia to dużą elastyczność, a jak widzisz, kanały są tablicą, dzięki czemu możesz wyświetlić listę kanałów, które chcesz, lub użyć czarnej listy, aby wykluczyć niektóre i zawrzeć wszystko inne.
Jestem bardzo zainteresowany odpowiedzią. Kilka tygodni temu zadałem podobne pytanie: http://stackoverflow.com/questions/7714790/custom-monolog-logging-channel-in-symfony2-command – Reuven