我最近从使用 Symfony 2.7 到 4.2。

以前在我的命令中为了登录到一个文件,我使用了类似的东西:

$logger = $this->getContainer()->get('logger'); 
$logger->error('put this in log'); 

此功能似乎已更改。我可以从 Controller 登录 https://symfony.com/doc/current/logging.html

我可以使用以下命令输出到控制台:
$logger = new ConsoleLogger($output); 
$logger->log('error','Put this in the log file'); 

但是,尽管我盯着 symfony 网站上的信息看,我只是不知道如何从命令中使用 symfony 4.2 登录到文件。

请您参考如下方法:

您需要将记录器注入(inject)到您的命令中,类似于 Controller 示例所示。

 
class ExampleCommand extends Command { 
 
    protected static $defaultName = 'do:something:awesome'; 
    /** 
     * @var \Psr\Log\LoggerInterface 
     */ 
    private $logger; 
 
    public function __construct(  LoggerInterface $logger  ) { 
 
        $this->$logger = $logger; 
 
        parent::__construct(  ); 
    } 
 
    public function execute( InputInterface $input, OutputInterface $output ) { 
        $io = new SymfonyStyle( $input, $output ); 
        $this->logger->info('Logging like a boss at ' . __FILE__ . ':' . __LINE__); 
 
       // the rest of your command 
   } 

您也可以使用 Psr\Log\LoggerAwareInterface (就像使用 Psr\Log\LoggerAwareTrait 一样简单),如果可用,记录器将自动注入(inject)。
class FooBar extends Command implements LoggerAwareInterface 
{ 
 
    use LoggerAwareTrait; 
 
// rest of the class implementation 
 
} 

有了这个,你甚至不需要使用构造函数注入(inject),因为 Symfony 会自动调用 setLogger()根据您的命令为您注入(inject)记录器。

您的命令将使用与项目其余部分相同的记录器配置,并且您将立即记录到文件。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!