我在生产环境中收到一个错误500,所以我花了很多时间来搜索显示错误的位置。我发现使用logger的symfony日志错误默认将输出发送到stderr,因此在我的情况下使用apache的错误日志。我想向symfony的env.log
发送消息(例如var/log/dev.log
和var/log/prod.log
)
文档说:
最小日志级别,默认输出和日志格式也可以通过将适当的参数传递给Logger的构造函数来进行更改。为此,请覆盖“记录器”服务定义。
但是我无法弄清楚如何更改记录器的输出,出于测试目的,我成功更改了vendor/symfony/http-kernel/Log/Logger.php
中的记录器结构,如下所示:
public function __construct(string $minLevel = null, $output = 'abspath/to/project/var/log/dev.log', callable $formatter = null)
但是我无法编辑供应商目录中的文件。
所以如何覆盖“记录器”服务定义?
请勿编辑供应商文件。这些包含在composer中,并在每次安装/更新时覆盖。
如果您想更改日志路径,可以使用monolog和config来完成
composer require symfony/monolog-bundle
monolog:
handlers:
# this "file_log" key could be anything
file_log:
type: stream
# log to var/log/(environment).log
path: "%kernel.logs_dir%/%kernel.environment%.log" #change path here
# log *all* messages (debug is lowest level)
level: debug
syslog_handler:
type: syslog
# log error-level messages and higher
level: error