用于清除symfony 2中的日志文件的命令

时间:2014-09-18 13:31:43

标签: symfony

我想知道是否有命令清除Symfony 2中的日志文件? 虽然有php app/console cache:clear清除缓存,但我不知道清除日志文件的任何命令(logs / dev.log和logs / prod.log)。 我总是手动清除这些日志。 谢谢

3 个答案:

答案 0 :(得分:10)

Symfony中没有明确的命令。但是使用外壳单线是没有什么可羞耻的:

# straightforward …
echo -n '' > app/logs/dev.log

# … or l33t
> app/logs/dev.log # works at least in bash, haven't tried others

答案 1 :(得分:7)

对于开发环境,您可以使用

cat /dev/null > app/logs/dev.log

和生产环境

cat /dev/null > app/logs/prod.log

/dev/null进入unix系统是虚拟设备虚拟文件实际上,因为所有内容都是unix中的文件),它会丢弃写在其上的每个数据。它也被称为位桶:)

此外,为什么不考虑利用logrotate
通过这种方式,您可以轻松地分离您的日志(每周 - 每月 - 等等)并且永远不会丢失"重要的"数据。最后但并非最不重要的是,您不必手动清除日志文件

答案 2 :(得分:3)

这是一个用于清除日志的简单Symfony命令,为Symfony编写> 2.8。清除整个log-dir的区别/好处是它只删除指定环境的日志而不删除可能已添加的自定义日志文件 - 在我的情况下是需求。

ConsoleCommand:     

namespace Std\AppBundle\Command;

use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class ClearLogsCommand extends Command
{
    /**
     * @var SymfonyStyle
     */
    private $io;
    /**
     * @var Filesystem
     */
    private $fs;
    private $logsDir;
    private $env;

    /**
     * ClearLogsCommand constructor.
     *
     * @param null|string $logsDir
     * @param             $env
     */
    public function __construct($logsDir, $env)
    {
        parent::__construct();
        $this->logsDir = $logsDir;
        $this->env = $env;
    }

    /**
     * @inheritdoc
     */
    protected function configure()
    {
        $this
            ->setName('std:logs:clear')
            ->setDescription('Deletes all logfiles');
    }

    /**
     * @param InputInterface  $input
     * @param OutputInterface $output
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->io = new SymfonyStyle($input, $output);
        $this->fs = new Filesystem();

        $log = $this->logsDir . '/' . $this->env . '.log';
        $this->io->comment(sprintf('Clearing the logs for the <info>%s</info> environment', $this->env));
        $this->fs->remove($log);
        if (!$this->fs->exists($log)) {
            $this->io->success(sprintf('Logs for the "%s" environment was successfully cleared.', $this->env));
        } else {
            $this->io->error(sprintf('Logs for the "%s" environment could not be cleared.', $this->env));
        }
    }
}

服务配置为:

services:
    std.command.clear_logs_command:
        class: Std\AppBundle\Command\ClearLogsCommand
        arguments: ['%kernel.logs_dir%', '%kernel.environment%']
        tags:
           -  { name: console.command }

执行run:

app/console std:logs:clear --env=prod

或作为要点: [https://gist.github.com/HKandulla/5de5a4074a5296b9465b4825431dfff3#file-clearlogscommand-php][1]