style poner para etiquetas estilos enlazar ejemplos documento codigos atributo logging symfony monolog

logging - poner - etiquetas css



¿Cómo se escriben los registros de un servicio en un archivo separado? (3)

Normalmente solo obtiene el servicio logger , y los registros van a:

%kernel.root_dir%/%kernel.environment%.log

Me gustaría ingresar mensajes de los servicios SOAP SOLO a:

%kernel.root_dir%/%kernel.environment%.soap.log

no al archivo de registro principal.

He leído el libro de cocina, pero no entiendo cómo configurar el monólogo.

Cualquier ayuda, pistas?


El MonologBundle registra todo usando los mismos controladores para todo el framework. Eso significa que si uno de sus servicios necesita registrarse en diferentes manejadores, debe crear su propio Logger / Handler e inyectarlo en su servicio.

Esto podría ser una configuración de ejemplo (en 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]

Espero que esto lo aclare.

Actualización: a partir de Symfony 2.1, también puede configurar qué canales reciben qué manejadores, por lo que alternativamente puede hacer algo como esto:

services: soap_service: class: Your/Soap/Client arguments: [@logger] tags: - { name: monolog.logger, channel: soap }

Que crea un nuevo canal de jabón (es decir, una instancia de registrador que recibe todos los controladores) y luego configura diferentes controladores para este canal:

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]

Esto significa que el controlador principal recibirá todo menos el canal de jabón, y el controlador de jabón recibirá solo el canal de jabón. También puede eliminar la clave de channels en el controlador principal si desea que su archivo de registro principal tenga todo, pero también tenga una copia de los registros de soap por separado. Esto brinda mucha flexibilidad, y como ve los canales es una matriz para que pueda enumerar los canales que desea, o utilizar la notación de !name la lista negra para excluir algunos e incluir todo lo demás.


Tuve un problema similar y elegí usar la biblioteca Monolog directamente en lugar del servicio Monolog.

Monolog usa Monolog/Handler/StreamHandler para escribir en archivos. La página de github tiene un ejemplo simple:

use Monolog/Logger; use Monolog/Handler/StreamHandler; // create a log channel $log = new Logger(''name''); $log->pushHandler(new StreamHandler(''path/to/your.log'', Logger::WARNING)); // add records to the log $log->addWarning(''Foo''); $log->addError(''Bar'');

Es posible seguir utilizando el servicio y simplemente presionar un nuevo controlador (y abrirlo una vez que haya finalizado; de lo contrario, es posible que escriba inadvertidamente más de lo que deseaba en el registro personalizado) pero no lo he probado. Honestamente, parecía más fácil usar la biblioteca directamente.


Resolví el mismo problema creando canales personalizados en config.yml como se explica en este enlace Cómo registrar mensajes en diferentes archivos .

monolog: channels: [''my_logger''] handlers: my_logger: level: debug type: stream path: ''%kernel.logs_dir%/my_logger.log'' channels: [my_logger]

Después de esto, puedo acceder a mi looger con un servicio creado dinámicamente llamado monolog.logger.my_logger