如何配置 symfony 以记录弃用?

How to config symfony to log deprecations?

我想从 Symfony 4.4 升级。到 5.0。所以我必须检查代码中的弃用。 symfony migration guide 说我必须使用网络开发工具栏,但在我的 API-app 中没有工具栏的前端。

如何配置 symfony/monolog 以将弃用警告记录到日志文件中?

更新 我创建了一个最小的例子:

 composer create-project symfony/website-skeleton:4.3.99

TestController.php

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
 * Class ApiController
 * @package App\Controller
 * @Route("", defaults={"_format"="json"})
 *
 */
class TestController extends AbstractController
{

    /**
     * @Route("/test", name="test")
     * @param Request $request
     * @return Response
     */
    public function test(Request $request): Response
    {
        @trigger_error(sprintf('DEMO DEPRECATION', __METHOD__), E_USER_DEPRECATED);
        return $this->json([
            'test' => '1'
        ]);
    }
}

monolog.yml

monolog:
    handlers:
        main:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
            channels: ["!event"]
        # uncomment to get logging in your browser
        # you may have to allow bigger header sizes in your Web server configuration
        #firephp:
        #    type: firephp
        #    level: info
        #chromephp:
        #    type: chromephp
        #    level: info
        console:
            type: console
            process_psr_3_messages: false
            channels: ["!event", "!doctrine", "!console"]
        deprecation_stream:
              type: stream
              path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log"
        deprecation_filter:
             type: filter
             handler: deprecation_stream
             max_level: info
             channels: ["php"]

运行 服务器

 bin/console server:run

打开http://localhost/test

但是 dev.deprecations.log 仍然是空的。

这是我的弃用日志配置,使用 Monolog:

monolog:
  handlers:
  # other handlers...

    ### Deprecation logs
    deprecation_stream:
      type: stream
      path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log"

    deprecation_filter:
      type: filter
      handler: deprecation_stream
      max_level: info
      channels: ["php"]

deprecation_stream指定一个日志文件来记录这些消息。

deprecation_filter 指定应记录哪些消息:info 消息发生在 php 频道(这是发送所有弃用日志消息的地方)。

您可以在整个应用程序范围内启用此应用程序,或者仅在您想要捕获这些消息的任何环境中以这种方式设置它。

Symfony 4.4 中存在错误,现已修复。 More details here.