일반적으로 컨테이너가 자동 삽입되지 않는 클래스 (예 : ContainerAwareCommand를 확장하는 컨트롤러 및 명령)에서 의존성 삽입을 사용하여 로거와 같은 서비스에 액세스 할 수 있습니다.
가능한 주입 유형은 속성, 설정자 및 생성자 주입입니다. 내 예는 constructor injection입니다. 먼저 에 서비스를 생성해야합니다. 예는 다음과 같이 할 수
가정 YML 구성 :이 서비스로 호출 될 경우 '로거'서비스가 자동으로 NonControllerExtendingClass에 주입 내 예에서
services:
your_service:
class: Vendor/YourBundle/NonControllerExtendingClass
arguments: ["@logger"] # inject logger service into constructor
.
use Symfony\Component\HttpKernel\Log\LoggerInterface;
// ...
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
가 지금처럼 방법 로거를 사용하십시오 : 당신이 당신의 공급 업체에/YourBundle/NonControllerExtendingClass 같은 것을 가지고 있는지 확인하십시오 당신이 당신의 클래스를 호출하는 경우 로거는 주입됩니다
public function someAction()
{
$this->logger->info('Im here');
}
서비스로 사용하거나 로거를 수동으로 주입하십시오.
// ... gets service from the container
$my_service = $this-container->get('your_service');
// ... manual injection
$logger = $this->container->get('logger');
// alternatively create a logger object yourself i.e. $logger = new Logger();
$my_service = new Vendor/YourBundle/NonControllerExtendingClass($logger);
당신이 교리 이벤트 리스너 또는 가입자를 사용한다 로거와 기업의 변화를 추적하려면
. 설명서에 대한 자세한 내용은
How to Register Event Listeners and Subscribers을 참조하십시오.
symfony 3의 경우 이 로거 인터페이스를 사용하십시오. Psr \ Log \ LoggerInterface – skonsoft