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

Docker环境下Symfony Monolog无法写入stderr/stdout且Nginx日志为空求助

解决思路

以下是针对Symfony 6.2 + Monolog + Nginx日志为空问题的排查方向:

1. 验证Monolog是否真的输出日志到php://stderr

你的Monolog配置中,main handler使用了fingers_crossed类型,只有当日志级别达到error及以上时,才会将缓冲的日志(包括debug级别)输出到nested handler。如果仅产生debug级日志,默认不会触发输出:

  • 手动触发一条error级日志测试:在代码中添加$this->logger->error('Test error log');
  • 检查PHP-FPM的错误日志(默认路径如/var/log/php8.1-fpm.log,根据你的PHP版本调整),看是否存在这条日志。如果有,说明Monolog配置无问题,问题出在Nginx与PHP-FPM的日志衔接;如果没有,再检查Monolog的channel和handler配置是否覆盖正确。

2. 配置PHP-FPM转发stderr到Nginx

在FPM环境下,php://stderr默认指向PHP-FPM自身的错误日志,不会直接写入Nginx日志。需要调整PHP-FPM配置实现转发:

  • 编辑PHP-FPM的池配置文件(如/etc/php/8.1/fpm/pool.d/www.conf):
    catch_workers_output = yes
    php_admin_value[error_log] = /dev/stderr
    php_admin_flag[log_errors] = on
    
  • 重启PHP-FPM服务:sudo systemctl restart php8.1-fpm

3. 检查Nginx日志的权限与配置正确性

  • 确认Nginx日志文件的路径与权限:默认路径为/var/log/nginx/error.log和/var/log/nginx/access.log,确保Nginx进程(通常是nginx用户)拥有写入权限:
    ls -l /var/log/nginx/
    
  • 验证Nginx的server块配置是否正确处理PHP请求,确保包含必要的FastCGI参数:
    server {
        # 其他配置...
        location ~ \.php$ {
            root /var/www/html;
            fastcgi_pass unix:/run/php/php8.1-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_intercept_errors on;
        }
    }
    
  • 重启Nginx服务:sudo systemctl restart nginx

4. 临时排除fingers_crossed的影响

如果测试时不想依赖error级日志触发输出,可以临时修改main handler为stream类型,直接输出所有debug级日志:

# config/packages/monolog.yaml
monolog:
    handlers:
        main:
            type: stream
            path: php://stderr
            level: debug
            formatter: monolog.formatter.json
        # 保留其他handler配置...

修改后清理缓存(php bin/console cache:clear),再触发debug日志,检查Nginx error.log是否有内容。

5. 测试原生PHP日志输出

在项目的public/index.php中添加原生PHP日志输出,验证基础日志链路是否正常:

error_log('Native PHP test log', 0);

如果这条日志能出现在Nginx error.log中,说明问题仅存在于Monolog配置;如果没有,继续排查PHP-FPM与Nginx的日志衔接。


内容的提问来源于stack exchange,提问作者Tommy Hoang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:07:19