【问题标题】:Is it possible to write monolog logs outside of the symfony project directory?是否可以在 symfony 项目目录之外编写独白日志?
【发布时间】:2019-08-09 06:36:50
【问题描述】:

我正在使用 symfony 4.1 和 monolog 3.3。 我在以下目录中有我的 symfony 项目:/var/www/html/{project_dir}。 在生产环境中,我希望我的日志存储在 /tmp/foo 而不是标准的 symfony 目录中:{project_dir_path}/var/log

我将Kernel::getLogDir() 方法更改为以下内容:

public function getLogDir()
{
    return 'prod' === $this->environment
        ? '/tmp/foo'
        : $this->getProjectDir().'/var/log';
}

我的生产monolog.yaml 路径如下所示:

path: "%kernel.logs_dir%/%kernel.environment%.log"

我的测试问题环境设置为“prod”。

我在调试的时候可以看到monolog的日志目录正确设置为/tmp/foo/tmp/foo 具有适当的访问权限 (0766),但是当我尝试记录某些内容时,该目录中没有任何内容。

【问题讨论】:

  • 您必须为此行 /tmp/foo 提供完整的验证路径,这将为您提供路径 php $fullVerifiedPath = getcwd();
  • 完整验证路径为/tmp/foo
  • 在路径字符串的末尾连接 DIRECTORY_SEPARATOR 常量

标签: php symfony logging monolog


【解决方案1】:

从概念上讲,出于安全原因,您不能这样做。 但是,您可以通过在项目目录中为正确的目录文件夹创建符号链接来绕过它。

类似:

public function getLogDir()
{
    return 'prod' === $this->environment
        ? '/var/symlink-to-tmp-folder'
        : $this->getProjectDir().'/var/log';
}

【讨论】:

    【解决方案2】:

    解决了,简单的错误。我在 docker 容器上开发,将我的项目目录作为一个卷,但 /tmp/foo 没有明显绑定,所以日志只是坐在容器上。

    【讨论】:

    • 是的,正确的。使用 Docker,特别是在生产环境中,您应该重定向到 php://sterr(作为独白 path)而不是文件,这样您就可以使用 docker logs -f .... 来恢复日志,而忽略文件是临时文件的事实不同的容器。
    猜你喜欢
    • 2020-06-26
    • 2015-07-13
    • 2013-07-21
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多