Normalement, vous obtenez simplement le service logger
, et les journaux vont à:
%kernel.root_dir%/%kernel.environment%.log
Je voudrais enregistrer les messages sous forme SOAP services SEULEMENT à:
%kernel.root_dir%/%kernel.environment%.soap.log
pas au fichier journal principal.
J'ai lu le livre de recettes, mais je ne comprends pas comment configurer monolog.
Une aide, des indices?
Le MonologBundle enregistre tout en utilisant les mêmes gestionnaires pour l'ensemble du framework. Cela signifie que si l'un de vos services doit se connecter à différents gestionnaires, vous devez créer votre propre enregistreur/gestionnaire et l'injecter dans votre service.
Cela pourrait être un exemple de configuration (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 les choses.
pdate: à partir de symfony 2.1, vous pouvez également configurer quels canaux reçoivent quels gestionnaires, vous pouvez donc 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 canal soap (c'est-à-dire une instance de logger recevant tous les gestionnaires), puis de configurer 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 gestionnaire principal recevra tout sauf le canal de savon et que le gestionnaire de savon ne recevra que le canal de savon. Vous pouvez également supprimer la clé channels
du gestionnaire principal si vous souhaitez que votre fichier journal principal contienne tout, mais également avoir une copie des journaux de savon séparément. Cela apporte beaucoup de flexibilité, et comme vous le voyez, les canaux sont un tableau afin que vous puissiez lister les canaux que vous voulez, ou utiliser la liste noire !name
notation pour en exclure certains et inclure tout le reste.
J'ai eu un problème similaire et j'ai choisi d'utiliser la bibliothèque Monolog directement au lieu du service Monolog.
Monolog utilise Monolog\Handler\StreamHandler
pour é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 de simplement pousser un nouveau gestionnaire (et de le faire apparaître une fois que vous avez terminé - sinon vous pourriez par inadvertance écrire plus que vous ne le vouliez dans votre journal personnalisé), mais je n'ai pas testé cela. Honnêtement, il semblait plus facile d'utiliser directement la bibliothèque.
J'ai résolu le même problème en créant des canaux personnalisés dans config.yml comme expliqué dans ce lien Comment enregistrer des messages dans différents fichiers .
monolog:
channels: ['my_logger']
handlers:
my_logger:
level: debug
type: stream
path: '%kernel.logs_dir%/my_logger.log'
channels: [my_logger]
Après cela, je peux accéder à mon looger avec un service créé dynamiquement nommé monolog.logger.my_logger