dev.log 为空是因为 symfony2 开发环境默认仅启用 console handler,日志输出到 cli 或 web profiler 而不写入文件;需为 router 和 request 等通道显式配置 rotating_file 或 stream handler 并正确声明 channels 才能落盘。

var/logs/dev.log 为空是正常现象——想让路由访问、请求参数、响应状态等数据真正落盘并长期留存,必须显式配置 Monolog 的处理器与通道,不能依赖默认 console handler。
为什么 dev.log 始终为空?
因为 Symfony2 开发环境默认只启用 console handler,它把日志输出到 CLI 或 Web Profiler,不写磁盘。即使你看到 Profiler 里有“Router”或“Request”日志,那些只是内存快照,关掉页面就丢。
-
consolehandler 不生成任何文件,无论你是否修改了app/logs/目录权限 -
rotating_file或streamhandler 才会落盘,但默认未启用 - 即使配置了文件 handler,若
channels没包含request或router,这些组件的日志仍不会进入该文件
如何记录路由匹配与请求原始数据?
Doctrine 和 Router 日志默认走 doctrine 和 router 通道,不是 main。要留存它们,得单独为这些通道配处理器:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 在
config/packages/dev/monolog.yaml(或app/config/config_dev.yml)中添加: handlers: router_file: type: stream path: '%kernel.logs_dir%/router.log' level: debug channels: ['router'] request_file: type: rotating_file path: '%kernel.logs_dir%/request.log' max_files: 30 level: info channels: ['request']- 确保
router和request已声明在monolog.channels配置里(Symfony 2.8+ 需显式声明) - 不要把
channels: ['!event', '!doctrine']这类排除规则套用到router上,否则日志直接被过滤掉
怎样避免日志爆炸又不错过关键请求?
全量记录每个 GET /api/user?id=123 会迅速撑爆磁盘。得按需采样 + 结构化提取:
- 用
Processor注入请求上下文:在services.yml中注册自定义 processor,把$request->getUri()、$request->getMethod()、$request->getClientIp()作为 extra 字段注入日志 record - 对高频静态资源(
.js、.css、/favicon.ico)加LevelFilterHandler或前置判断跳过记录 - 生产环境禁用
debug级别,改用info+ 显式$logger->info('route.matched', ['route' => $name, 'params' => $params]) - 不要依赖
logging: true在framework.router下的全局开关——它只控制 Profiler 显示,不触发 Monolog 写入
长期留存的关键其实是轮转与归档策略
日志文件不是存得越久越好,而是要能快速定位某天某时某请求。绕不开三个实操点:
-
rotating_file的max_files建议设为90,配合系统 cron 每日凌晨gzip旧日志并mv到/var/log/symfony/archive/ - 别用
daily类型处理器(Symfony 2.3 以下不支持),改用rotating_file+filename_format自定义日期后缀(需扩展 Monolog) - 如果用 NFS 或远程日志服务,
streamhandler 的path可直接写syslog://localhost:514或tcp://10.0.1.5:5000,比本地轮转更可靠
routers 或 routing)、处理器没绑定到对应 channel、或者权限问题导致 app/logs/ 目录不可写——这些地方不报错,但日志就是不出现。










