canal de journalisation monolog personnalisé dans la commande symfony2
Dans ce article du cookbooknous pouvons voir comment utiliser un canal personnalisé dans un service. Mais comment puis-je utiliser une connexion personnalisée canal dans une commande ?
J'ai créé une symfony2 de commande pour effectuer quelque chose. Je voudrais utiliser monolog pour connecter les choses par ma commande.
En fait, je veux écrire le journal de ma commande dans un autre fichier de logs de l'application.
source d'informationauteur Reuven
Vous devez vous connecter pour publier un commentaire.
Toute commande personnalisée qui s'étend
ContainerAwareCommand
a accès à Symfony du conteneur de services. Vous pouvez définir un service qui se connecte à un canal personnalisé dans votre config.Vous pouvez accéder à votre service de la commande de la façon suivante
Cet enregistreur de journal avec canal comme "mychannel".
Pour information, Le défaut de l'enregistreur de journaux de service de canal "app". Ceci peut être vu dans le fichier
Symfony/Bundle/MonologBundle/Resources/config/monolog.xml
. C'est aussi l'endroit où la valeur par défautlogger
service est défini.Une question similaire a été demandé et la réponse ici:
Comment écrire des journaux à partir d'un service en fichier séparé?
Grâce
Essayer cela, utiliser la bibliothèque directement
Peut-être que cela peut résoudre votre problème, ajoutez ceci dans votre fichier de commande.
Dans la plupart des cas, votre commande étend ContainerAwareCommand (comme vu ici: http://symfony.com/doc/current/cookbook/console.html#creating-a-basic-command).
Cela signifie que votre commande a accès à Symfony du conteneur de services - qui est un grand sac de tous les services à l'intérieur de Symfony (c'est à dire les objets utiles). Dans votre cas, vous avez besoin de la
logger
service, que vous pouvez obtenir par l'accaparement du récipient:(référence: http://symfony.com/doc/current/cookbook/console.html#getting-services-from-the-service-container)
Maintenant, vous pouvez utiliser l'enregistreur comme d'habitude. Si jamais vous avez besoin d'autres services, il suffit de cocher la
php app/console container:debug
de commande, qui répertorie tous les services unique sur le conteneur.Bonne chance!
Pour Symfony 3.3 en raison de autowire services lorsque vous souhaitez vous connecter séparées sur les fichiers de suivre cette démarche:
Par exemple, supposons que nous avons besoin de vous connecter sur 2 rotation des fichiers:
exception.log
: Pour les exceptions causés dans l'application.dataFetch.log
: Pour les appels à l'api tha récupère les données d'applications.Le
services.yml
mettre:Maintenant pour l'exception loger, vous pouvez injecter de l'annonce de la dépendance de la
monolog.logger.exception
tandis que pour les dataFetch vous pouvez dépendance injecter lemonolog.logger.dataFetch
.