Symfony 2 - 在一个服务中记录登录信息

3

我是一个Symfony的新手,所以请指出任何明显的错误:)

我有一个发送推送通知的服务。我正在尝试将日志对象传递给该服务,以便我可以写入主日志处理程序。 总之,这并没有被写入到任何地方,我不知道哪里出错了。

我从我的代码中拿掉了一些东西,但这基本上是我的想法。

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>
3个回答

2

你可以按照你的示例使用完整的堆栈:

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>

请检查文件:dev_new_channel.log

在执行此操作后,您还可以清除缓存,以确保所有的yml/xml更改都已生效!

为什么我要建议这样做? 使用通道和处理程序将帮助您维护日志的组织,并进行轻松的更改!


谢谢您的回复。我会尽快查看这个问题,今晚可能会有时间。这似乎是我一直在追求的方向,只是还没有完全理解。我会随时向您汇报进展情况! - au_stan
看起来这是针对 Monolog 2.4 的配置,而我正在使用 2.3。很抱歉我没有说明清楚。这让我朝着正确的方向前进了,但在配置中仍然摸索不清。 - au_stan
如果您没有任何特定的原因停留在旧版本中,我建议您更新它! - Renato Mefi
@au_stan 如果你成功让它工作了,别忘了选择正确的答案! - Renato Mefi
不确定升级后的记录器是否存在任何问题,但可能需要进一步研究。 - au_stan

0

试试这个:

$this->logger->info('test');

用这个代替:

$this->logger->addInfo('test'); 

希望这可以帮到你(尽快提供更多信息)。

感谢您的回复,@matteo。我会尝试您的建议,但我十分确定我已经尝试过了。那是我的最初尝试,但仅因为我在其他地方看到过addInfo()才尝试它。我当时/现在很绝望。哈!我会尽快更新。 - au_stan

-2
public function getCustomerAction(Request $request){ 
 Common::Init($this->get('logger'),$request->headers->get('Request-id'));}

class Common {

    public static $logger;
    public static $request_id;



    public static function Init($logger, $request_id) {

        self::$logger = $logger;


        //  self::$logger->pushHandler(new StreamHandler('php://stderr', Logger::DEBUG));



        if (is_null($request_id)) {
           self::$request_id = Common::generate_uuid();
        }
        else{
          self::$request_id  =$request_id;
        }

          self::$logger->pushProcessor(function ( $record) {

           $record['context']['request-id'] = isset($_SERVER['HTTP_X_REQUEST_ID']) ? $_SERVER['HTTP_X_REQUEST_ID'] : self::$request_id;
           dump($record);
           return $record;
        });

         Common::$logger->debug('hey it works');



    }


    public static function generate_uuid() {
        return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
        );
    }}

1
一个简短的摘要可以帮助评审人员(比如我)判断您的答案是否有效;有兴趣的用户不必深入代码就能理解您的方法。只需要一两句话就可以了,不会太麻烦。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接