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

生产环境错误未写入prod.log文件问题求助

问题排查与解决方案

1. 检查文件权限

确保prod.log文件和%kernel.logs_dir%目录的权限正确,Web服务器进程(如www-data、nginx)需要具备写入权限。

  • 可执行以下命令调整权限(根据实际日志路径修改):
    chown www-data:www-data var/logs/prod.log
    chmod 664 var/logs/prod.log
    

2. 验证fingers_crossed Handler配置

生产环境的main handler为fingers_crossed类型,会缓冲日志直到达到action_level(当前为error)才写入,需确认:

  • 500错误确实触发了error及以上级别的日志输出(比如框架自动捕获的致命错误,或代码中主动调用$logger->error())
  • 当前配置排除了404、405状态码,但500不在排除列表,此部分无问题
  • 若进程在错误发生前意外终止,buffer_size=50的缓冲日志会丢失。可临时修改配置,将main handler改为直接写入的stream类型测试:
    when@prod:
        monolog:
            handlers:
                main:
                    type: stream
                    path: "%kernel.logs_dir%/prod.log"
                    level: error
                    formatter: monolog.formatter.json
                # 暂时注释nested等其他handler
                # nested:
                #     ...
    
    测试500错误能否写入日志,判断是否为缓冲机制导致的问题。

3. 检查框架错误处理配置

确认Symfony的错误处理未抑制日志输出,查看config/packages/framework.yaml:

framework:
    error_handler:
        log_errors: true

确保log_errors设置为true。

4. 简化配置排除冲突

暂时移除deprecation等非核心handler,简化生产环境的Monolog配置,排除多handler间的冲突可能。

5. 手动触发日志测试

在生产环境代码中添加测试逻辑,主动触发错误日志:

// 示例:在控制器中添加测试方法
public function testProductionLog()
{
    $this->logger->error('Production error log test');
    throw new \Exception('Trigger 500 error');
}

访问该接口后查看prod.log,判断是日志系统问题还是错误触发环节的问题。


内容的提问来源于stack exchange,提问作者Toma Tomov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:25:19