symfony 8.0 中 finder 组件可直接查找日志文件,无需完整启动框架;默认已内置,仅需用 files()->name('*.log')->in(__dir__.'/var/log') 等链式调用即可匹配并输出日志文件名及大小。

在 Symfony 8.0 中,使用 Finder 组件查找日志文件非常直接——它不依赖框架完整启动,只需引入组件并指定日志目录路径即可精准匹配。
安装并启用 Finder 组件
Symfony 8.0 默认已包含 symfony/finder,无需额外安装。若项目中未启用(例如最小化安装),执行以下命令:
composer require symfony/finder
基础脚本:查找 var/log/ 下所有 .log 文件
以下是一个独立可运行的 PHP 脚本(如 find-logs.php),放在项目根目录执行即可:
<?php require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\Finder\Finder;
$finder = new Finder();
$finder
->files()
->name('*.log')
->in(__DIR__.'/var/log')
->sortByName();
foreach ($finder as $file) {
echo $file->getRelativePathname() . ' (' . $file->getSize() . " bytes)\n";
}
说明:
– files() 确保只遍历文件,跳过子目录;
– name('*.log') 匹配所有以 .log 结尾的文件(包括 dev.log、prod.log、debug.log 等);
– in(__DIR__.'/var/log') 指向 Symfony 默认日志目录;
– sortByName() 让结果按字母顺序排列,便于观察。
进阶用法:按日期或大小筛选
如需只找最近 7 天修改的日志,或大于 1MB 的大日志文件,可追加条件:
- 最近 7 天:
->date('since 7 days ago') - 大于 1MB:
->size('> 1M') - 排除旧压缩包:
->notName('*.log.*')(跳过prod.log.1.gz类文件)
组合示例:
$finder
->files()
->name('*.log')
->notName('*.log.*')
->in(__DIR__.'/var/log')
->date('since 3 days ago')
->size('> 512K');
集成到 Symfony 命令行命令(Console Command)
若希望作为 bin/console 命令使用(如 php bin/console app:find-logs),可在 src/Command/FindLogsCommand.php 中定义:
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
class FindLogsCommand extends Command
{
protected static $defaultName = 'app:find-logs';
protected function execute(InputInterface $input, OutputInterface $output): int
{
$finder = new Finder();
$finder->files()->name('*.log')->in($this->getApplication()->getKernel()->getLogDir());
foreach ($finder as $file) {
$output->writeln(sprintf('<info>%s</info> — %s', $file->getFilename(), $file->getSize()));
}
return Command::SUCCESS;
}
}
注意:
– 使用 $kernel->getLogDir() 动态获取日志路径,兼容自定义配置;
– 命令自动注册(Symfony 8+ 支持基于命名空间的自动发现)。











