au_stan au_stan - 1 month ago 9
PHP Question

Symfony 2 - logging in a service

novice to symfony so please point anything out obvious :)

I have a service that sends push notifications. I am trying to pass a logging obj to that service so that i can write to the main log handler.
bottom line is this does not write anywhere and i have no idea where i've gone wrong.

I took some things out of my code but this is generally the idea.

blah\CoreBundle\Service\PushTask.php

public function __construct(
\Doctrine\ORM\EntityManager $entityManager,
$logger
) {
$this->entityManager = $entityManager;
$this->logger = $logger;
}
...
public function pushSomething()
{
$this->logger->addInfo('test'); // not writing
}


config_dev.yml

monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: info


blah\CoreBundle\Resources\config\services.xml

<service id="civix_core.push" class="blah\CoreBundle\Service\PushTask">
<argument type="service" id="doctrine.orm.entity_manager" />
<argument type="service" id="logger" />
</service>

Answer

The complete stack you can use following your example:

blah\CoreBundle\Service\PushTask.php

/**
 * @var LoggerInterface
 */
private $logger;

public function __construct(
   \Doctrine\ORM\EntityManager $entityManager,
    LoggerInterface $logger
) {
    $this->entityManager = $entityManager;
    $this->logger = $logger;
}
...
public function pushSomething() 
{
    $this->logger->info('test');
}

config.yml

monolog:
  channels:
    - your_new_channel
  handlers:
    // just keep it or add a new handler like:
    your_handler:
      type:   stream
      path:   "%kernel.logs_dir%/%kernel.environment%_new_channel.log"
      level:  info
      channels: ["your_new_channel"]

blah\CoreBundle\Resources\config\services.xml

<service id="civix_core.push" class="blah\CoreBundle\Service\PushTask">
        <argument type="service" id="doctrine.orm.entity_manager" />
        <argument type="service" id="monolog.logger.your_new_channel" />
</service>

Go check the file: dev_new_channel.log

You can also clear your cache after doing this in order to make sure all the yml/xml changes are in place!

Why is this my suggestion? Using channel and handlers will help you maintain your log organized and with easy changes!