要查看symfony框架运行时的详细日志,必须先确保开发环境启用debug级别日志且日志文件可读,否则默认只记录error或warning,关键调试信息将被过滤掉。

确认当前环境与日志配置是否匹配
打开config/packages/dev/monolog.yaml,检查是否存在以下配置块:
monolog:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
如果level不是debug,而是info或更高,则无法看到控制器初始化、服务解析、事件分发等内部流程——这些正是“框架怎么用”的核心痕迹。
【必须确保APP_ENV=dev且APP_DEBUG=1】,否则即使配置为debug,Symfony也会强制降级为warning级别输出。
快速定位并读取日志文件
执行php bin/console about命令,确认Kernel logs directory路径(通常是var/log)。
进入该目录:cd var/log。
列出当前环境日志:ls -la dev.log(若APP_ENV=dev)或ls -la local.log(若使用local环境)。
用tail -f dev.log实时追踪新日志——每次页面刷新或API请求都会立即追加,包括路由匹配、控制器调用、模板渲染耗时等。
在代码中主动触发debug日志埋点
方法一:在控制器中注入LoggerInterface并记录上下文
use Psr\Log\LoggerInterface;
public function index(LoggerInterface $logger) {
$logger->debug('路由解析完成', ['route' => $this->getParameter('router.request_context.host')]);
$logger->debug('服务容器已加载', ['services_count' => count($this->container->getServiceIds())]);
return $this->render('home.html.twig');
}
这一步能验证日志是否真正写入——如果dev.log里没出现这两行,说明Logger未绑定到debug通道,或monolog配置被prod覆盖。
方法二:直接调用dump()配合日志缓冲
在任意PHP文件开头加入:ini_set('error_log', 'php://stdout');,再执行dump($request->attributes->get('_route'));,其输出会出现在console终端而非日志文件,但可即时验证请求上下文。
排查日志不生成的常见断点
第一步:检查var/log目录权限,执行ls -ld var/log,确认web服务器用户(如www-data)对该目录有写权限。
第二步:运行php bin/console debug:container --parameter=kernel.logs_dir,确认路径输出是否为预期目录;若返回null,说明monolog未正确加载。
第三步:临时修改config/packages/monolog.yaml,在handlers下新增一个console处理器:
console_debug:
type: console
verbosity_levels: { -1: debug, 0: info, 1: notice, 2: warning, 3: error }
channels: ["!event"]
然后清空缓存:php bin/console cache:clear。此时所有debug日志会同时输出到终端,绕过文件写入环节,快速验证日志逻辑是否生效。
【注意:console处理器仅在dev环境生效,prod中会被自动禁用】











