首页 > 解决方案 > symfony 4 - 更改记录器输出路径

问题描述

我在生产环境中收到错误 500,所以我花了很多时间来搜索显示错误的位置。我发现使用logger的 symfony 日志错误默认情况下将输出发送到 stderr,因此在我的情况下使用 apache 的错误日志。我想向 symfony 发送消息env.log(例如var/log/dev.logvar/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)

但我无法编辑供应商目录中的文件。

那么我如何覆盖“记录器”服务定义?

标签: phploggingsymfony4

解决方案


不要编辑供应商文件。这些由作曲家包含,并在每次安装/更新时被覆盖。

如果要更改日志路径,可以使用 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

推荐阅读