我需要记录所有用户的操作与monolog。但是,只有在动作持续数据与教条,插入,更新或删除。教义坚持后Symfony monolog
我该怎么办?我能定义一个像“afterPersist”这样的通用方法来记录每一个动作吗?
Thx!
编辑:
监听器:
use Doctrine\ODM\MongoDB\Event\OnFlushEventArgs;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\SecurityContextInterface;
class DatabaseLogger
{
protected $logger;
protected $security_context;
protected $request;
public function __construct(LoggerInterface $logger, ContainerInterface $service_container)
{
$this->logger = $logger;
$this->setSecurityContext($service_container->get('security.context'));
}
public function setRequest(RequestStack $request_stack)
{
$this->request = $request_stack->getCurrentRequest();
}
public function setSecurityContext(SecurityContextInterface $security_context)
{
$this->security_context = $security_context;
}
public function onFlush(OnFlushEventArgs $args)
{
// configure this however you want
}
}
和service.yml
cc.listener.database_logger:
class: Cc\HitoBundle\Listener\DatabaseLogger
tags:
- { name: doctrine_mongodb.odm.event_listener, event: onFlush }
- { name: monolog.logger, channel: database_access }
calls:
- [ setRequest, [@request_stack] ]
arguments: [ @logger, @service_container ]
我得到了一个错误,当我添加的安全上下文:
ServiceCircularReferenceException :循环参考检测ed for service“doctrine_mongodb.odm.default_document_manager”,path:“doctrine_mongodb.odm.default_document_manager - > doctrine_mongodb.odm.default_connection - > doctrine_mongodb.odm.event_manager - > cc.listener.post_persist - > security.context - > security.authentication .manager - > security.user.provider.concrete.user_db“。
除了点你不尊重的服务的标记......一切似乎都很完美+1 – DonCallisto 2014-09-24 16:37:20
@DonCallisto将它更新为点符号,因此它确实是完美的;) – 2014-09-25 10:27:47
这是我的眼中的快乐:D – DonCallisto 2014-09-25 10:37:51