57 votes

Comment écrire des journaux à partir d'un service en fichier séparé?

Normalement, vous obtenez juste logger de service, et les journaux aller à: %kernel.root_dir%/%kernel.environment%.log

Je voudrais journal des messages SOAP services UNIQUEMENT: %kernel.root_dir%/%kernel.environment%.soap.log, de ne pas le principal fichier de log.

J'ai lu le livre de cuisine, mais je pense que je ne comprends pas comment configurer monolog. Toute aide, des indices?

79voto

Seldaek Points 12311

Le MonologBundle journaux tout en utilisant les gestionnaires de mêmes pour l'ensemble du cadre. Cela signifie que si l'un de vos besoins en matière de services pour vous connecter à des gestionnaires différents, vous devez créer votre propre Enregistreur/Gestionnaire et de les injecter dans votre service.

Ce pourrait être un exemple de config (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]

J'espère que cela clarifie.

Mise à jour: comme symfony 2.1, vous pouvez également configurer les canaux qui reçoivent des gestionnaires, de sorte que vous pourrait aussi faire quelque chose comme ceci:

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

Ce qui crée un nouveau savon canal (c'est à dire enregistreur instance de la réception de tous les maîtres-chiens), puis de configurer les différents gestionnaires pour ce 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]

Cela signifie que le principal gestionnaire recevra tout, mais le savon de canal, et le savon gestionnaire recevra uniquement le savon de canal. Vous pouvez également supprimer l' channels sur la touche sur le principal le gestionnaire si vous voulez que votre fichier journal principal de tout avoir, mais aussi d'avoir une copie seulement le savon journaux séparément. Cela apporte beaucoup de souplesse, et comme vous le voyez les canaux est un tableau de sorte que vous pouvez dresser la liste de chaînes que vous voulez, ou utiliser la liste noire, !name de la notation à l'exclusion de certains et tout le reste.

29voto

Arms Points 8729

J'ai eu un problème similaire et j'ai choisi d'utiliser Monolog bibliothèque directement à la place de la Monolog service.

Monolog utilise Monolog\Handler\StreamHandler d'écrire dans des fichiers. La page github a un exemple 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');

Il peut être possible de continuer à utiliser le service et il suffit de pousser un nouveau gestionnaire (et de la pop, une fois que vous avez terminé - sinon vous risquez de vous, par inadvertance, d'écrire plus que ce que vous souhaitiez pour votre journal personnalisé) mais je n'ai pas testé cette. Honnêtement, il semblait plus facile que d'utiliser la bibliothèque directement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X