symfony 5.4.54 默认启用 monolog,需按环境配置:dev 用 console handler(debug 级)、prod 用 rotating_file(error 级),注意路径可写、保留 30 天日志,并通过 webprocessor 等补充请求上下文信息。

在 Symfony 5.4.54 中添加日志记录,核心是配置 Monolog —— 它已是框架默认日志组件,无需额外安装。重点不是“加不加”,而是“怎么配得清楚、有用、不踩坑”。下面直接说关键操作和常见陷阱。
确认基础配置已启用
Symfony 5.4 默认已启用 Monolog,配置位于 config/packages/dev/monolog.yaml(开发环境)和 config/packages/prod/monolog.yaml(生产环境)。只要没手动删掉这些文件,Logger 服务就可用,控制器或服务中可直接注入 LoggerInterface:
-
php bin/console debug:container --types Psr\Log\LoggerInterface可验证服务存在 - 若报错找不到 LoggerInterface,检查是否误删了
config/packages/monolog.yaml或其环境子配置
按环境区分日志行为
开发环境重调试,生产环境重稳定和可查。不要共用一套配置:
-
dev:默认用
consolehandler 输出到终端,级别设为debug;可加firephp或chromephp(需浏览器插件)辅助查看 -
prod:禁用 console,只保留
rotating_file,级别建议设为error或warning,避免 INFO 泛滥 - 注意:5.4.54 不支持 v6 的
channels显式声明语法,仍沿用老结构,如顶层handlers: [main]是合法的
写入文件的关键配置项
想让日志落地成文件,重点看 rotating_file handler 的几个参数:
-
type: rotating_file:自动按日期轮转,文件名格式固定为app-2026-10-20.log -
path: "%kernel.logs_dir%/app.log":路径必须可写,建议提前chmod -R 775 var/log -
max_files: 30:保留最近 30 天日志,防磁盘打满 -
level: error:该 handler 只处理 ERROR 及以上级别,INFO 不会进文件
加上下文让日志真正可查
光有时间戳和消息不够,排障时缺请求 ID、用户 ID、URI 就很难定位。靠 Processor 补充:
- 默认已启用
IntrospectionProcessor(加文件行号)、WebProcessor(加请求信息) - 若用 API 场景,建议在
config/packages/monolog.yaml中显式加processor: web到 handler 下 - 自定义 Processor(如注入 JWT 用户 ID)只需实现
Monolog\Processor\ProcessorInterface,再在配置里注册即可











