Как настроить symfony для регистрации устаревания?

Я хотел бы перейти с Symfony 4.4. до 5.0. Поэтому я должен проверить наличие устаревания в коде. В руководстве по миграции Symfony сказано, что я использовать панель инструментов веб-разработчика, но в моем API-приложении нет внешнего интерфейса для панели инструментов.

Как я могу настроить 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'
        ]);
    }
}

монолог.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 по-прежнему пуст.


person oceanBT    schedule 23.12.2019    source источник
comment
Кажется, что панель инструментов отладки в режиме разработки фиксирует эти уведомления об устаревании, потому что они не отображаются в стандартном файле журнала. Я подозреваю, что проход компилятора перехватывает их.   -  person PeterB    schedule 06.02.2020
comment
Я создал отчет об ошибке/вопрос на github github.com/symfony/symfony/issues/35367   -  person oceanBT    schedule 19.02.2020


Ответы (2)


Это моя конфигурация журнала устаревания с использованием 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 (именно сюда отправляются все сообщения журнала устаревания).

Вы можете включить это приложение для всего приложения или настроить его таким образом только в любой среде, в которой вы хотите перехватывать эти сообщения.

person yivi    schedule 23.12.2019
comment
Извините, у меня не работает. Я установил панель инструментов разработчика и создал демо-контроллер. Там я вижу предупреждения об устаревании, но больше нигде. Я не понимаю, почему панель инструментов разработчика может ловить эти предупреждения. Я пытаюсь создать минимальный пример. - person oceanBT; 02.01.2020
comment
я обновил вопрос с минимальным примером. - person oceanBT; 14.01.2020

В Symfony 4.4 была ошибка, которая теперь исправлена. Подробнее здесь.

person oceanBT    schedule 30.06.2020