You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 4生产环境Cron执行命令无法生成Monolog日志求助

问题分析与解决步骤

1. 修正Monolog配置,让生产日志写入文件

你的main处理器使用了fingers_crossed类型,它本身不会直接写入prod.log,而是将日志转发给handler字段指定的nested处理器。但当前nested的输出目标是php://stderr,所以日志只会流向标准错误流,不会写入日志文件。

修改config/packages/prod/monolog.yml,有两种可选方案:

方案一:保留缓冲功能(推荐)

维持fingers_crossed的缓冲机制,仅调整nested的输出路径:

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: notice
            handler: nested
            excluded_http_codes: [404, 405]
            buffer_size: 50
        nested:
            type: stream
            path: '%kernel.logs_dir%/%kernel.environment%.log' # 修改为日志文件路径
            level: debug
            formatter: monolog.formatter.json
        console:
            type: console
            process_psr_3_messages: false
            channels: ["!event", "!doctrine"]

方案二:直接写入日志(无缓冲)

如果不需要日志缓冲,将main改为stream类型直接写入文件:

monolog:
    handlers:
        main:
            type: stream
            path: '%kernel.logs_dir%/%kernel.environment%.log'
            level: notice
            formatter: monolog.formatter.json
        console:
            type: console
            process_psr_3_messages: false
            channels: ["!event", "!doctrine"]

2. 确保Cron任务以生产环境执行

Symfony控制台命令默认使用dev环境,Cron执行时必须显式指定--env=prod,否则会加载开发环境配置。示例Cron任务:

* * * * * cd /path/to/your/project && php bin/console app:my-command --env=prod >> /dev/null 2>&1

3. 修复目录权限问题

确认Cron执行用户对var/log目录有写入权限:

chown -R [cron执行用户]:[用户组] var/log
chmod -R 755 var/log

4. 手动验证命令输出

在服务器终端直接执行命令,排查是否有日志输出或报错:

# 查看标准错误流输出
php bin/console app:my-command --env=prod 2>&1

内容的提问来源于stack exchange,提问作者K. Weber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:05