使用Symfony2更改cache_dir和log_dir

时间:2011-09-09 04:21:31

标签: caching logging symfony configuration

由于部署限制,我希望我的Symfony2应用程序在我的文件系统中的/ var / ...下使用的日志和缓存目录。出于这个原因,我正在寻找一种方法来配置Symfony并覆盖这两个目录的默认位置。

我已经看过kernel.cache_dir和kernel.log_dir并读取了类Kernel.php。从我所看到的,我不认为可以通过配置更改目录位置,我将不得不修补Kernel.php类。

这是真的,还是有办法在不修改框架代码的情况下实现我想要的东西?

7 个答案:

答案 0 :(得分:18)

将以下方法添加到app / AppKernel.php(AppKernel扩展内核),使它们返回首选路径:

public function getCacheDir()
{
    return $this->rootDir . '/my_cache/' . $this->environment;
}

public function getLogDir()
{
    return $this->rootDir . '/my_logs';
}

答案 1 :(得分:8)

我很高兴找到你的帖子,但我对这些不合适的答案感到有些困惑。

我遇到了同样的问题,发现日志取决于config参数 kernel.logs_dir

所以我只是将它添加到我的config.yml参数中:

kernel.logs_dir: /var/log/symfonyLogs

如果答案迟到,我希望它对你有所帮助。

答案 2 :(得分:6)

我认为最简单的方法是将文件夹链接到另一个地方。我们已经在prod服务器上做了这个,但是当你在windows上开发本地时,设置符号链接有点复杂。

ln -s /var/cache/ /var/www/project/app/cache
像这样的东西。

答案 3 :(得分:3)

我想提供一个替代方案,即设置环境变量来更改这些目录。这样,根据舞台设置起来更容易。 (测试,生产或开发)

export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache"
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs"

也可以使用SetEnv在虚拟主机中设置环境变量。 在读取内核参数时,symfony将查找以SYMFONY__开头的所有$ _SERVER变量,删除第一部分并将所有双下划线转换为。

Source code

见第568至608行

答案 4 :(得分:1)

在symfony中,您可以通过扩展AppKernel中的方法来覆盖缓存(和日志)目录。

// app/appKernel.php
class AppKernel extends Kernel
{
    // ...

    public function getCacheDir()
    {
        return $this->rootDir.'/'.$this->environment.'/cache';
    }
}

查看http://symfony.com/doc/current/cookbook/configuration/override_dir_structure.html#override-cache-dir

答案 5 :(得分:0)

我使用configuration solution from Dragnic但是我将路径放在parameters.yml文件中,因为git会忽略此文件。换句话说,它没有从我的PC同步到git存储库,所以在prod环境中没有任何影响。

# app/config/parameters.yml
parameters:
    database_driver: pdo_mysql
    [...]
    kernel.cache_dir: "T:/project/cache"
    kernel.logs_dir: "T:/project/logs"

配置:Windows7,WAMP 2.4和Symfony 2.3.20。

但你必须知道:

  

从配置文件中覆盖kernel.cache_dir参数是一个非常糟糕的主意,并且不支持在Symfony中更改缓存文件夹的方法。

     

它会破坏内容,因为您现在可以为内核Kernel::getCacheDir()和参数提供不同的缓存文件夹。

来源:https://github.com/symfony/AsseticBundle/issues/370

所以你应该只在dev环境中使用它,如果你不想改变 app / AppKernel.php 文件的内容,否则请看其他答案

答案 6 :(得分:0)

没有接受的答案,还有一个非常古老的问题,但是我发现它是谷歌的,所以我在这里发布了一个更新的方法来更改缓存目录和日志目录,(source here

  • remember, short syntax for arrays require php 5.4
  • 您可以选择要修改的环境,并根据需要管理不同的缓存和日志目录

    public function getCacheDir()
    {
        if (in_array($this->environment, ['prod', 'test'])) {
        return '/tmp/cache/' .  $this->environment;
    }
    
    return parent::getCacheDir();
    }
    
    public function getLogDir()
    {
        if (in_array($this->environment, ['prod', 'test'])) {
        return '/var/log/symfony/logs';
    }
    
    return parent::getLogDir();
    }