是否可以在symfony项目目录之外编写monolog日志?

I am using symfony 4.1 and monolog 3.3. I have my symfony project in the following directory: /var/www/html/{project_dir}. In production environment I want my logs to be stored inside /tmp/foo instead of standard symfony directory: {project_dir_path}/var/log.

I changed Kernel::getLogDir() method to the following:

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

My production monolog.yaml path looks like this:

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

My environment for testing issues is set to 'prod'.

When I am debugging, I can see that monolog's log directory is correctly set to /tmp/foo. /tmp/foo has proper access rights (0766) but when I try to log something, the directory contains nothing.

展开翻译

译文

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

我将 Kernel :: getLogDir()</ code>方法更改为以下内容:</ p>

  public function getLogDir()
{
return'prod'=== $ this-&gt; environment
? '/ tmp / foo'
:$ this-&gt; getProjectDir()。'/ var / log';
}
</ code> </ pre>

我的作品 monolog.yaml </ code>路径如下所示:</ p>

  path:“%kernel.logs_dir%/%kernel.environment%.log”
</ code> < / pre>

我的测试问题环境设置为'prod'。</ p>

当我调试时,我可以看到monolog的日志目录被正确设置为< 代码>的/ tmp /富</代码>。 / tmp / foo </ code>具有适当的访问权限(0766),但是当我尝试记录某些内容时,该目录不包含任何内容。</ p>
</ div>

dqlk31541
dqlk31541 在路径String的末尾连接DIRECTORY_SEPARATOR常量
3 个月之前 回复
dongsaoshuo4326
dongsaoshuo4326 完整验证的路径是/tmp/foo。
3 个月之前 回复
doupaxia2478
doupaxia2478 你必须为这行/tmp/foo提供一个完整的验证路径,这将为你提供路径php$fullVerifiedPath=getcwd();
3 个月之前 回复

2个回答

Solved, simple mistake. I was developing on docker container, having my project directory as a volumine, but /tmp/foo wasn't obviously binded, so logs were just sitting on the container.

展开翻译

译文



解决了,简单的错误。 我正在使用docker容器进行开发,将我的项目目录作为volumine,但 / tmp / foo </ code>显然没有绑定,所以日志只是坐在容器上。 </ p>
</ div>

Conceptually, you can't for security reason. But, you can bypass it by creating a symlink inside your project directory for the right directory folder.

Something like:

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

展开翻译

译文



从概念上讲,出于安全原因,你不能这样做。

但是,您可以通过在项目目录中为正确的目录文件夹创建符号链接来绕过它。</ p>

类似于:</ p>

  public  function getLogDir()
{
return'prod'=== $ this-&gt; environment
? '/ var / symlink-to-tmp-folder'
:$ this-&gt; getProjectDir()。'/ var / log';
}
</ code> </ pre>
</ div>

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!