如何配置 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
但是 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.
我想从 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
但是 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.