我尝试使用官方的php-fpm镜像在Docker容器中运行一个基于Yii的PHP应用程序。
docker 容器通常将所有日志消息写入 stdout
/stderr
。所以我在我的容器中用一个基本上看起来像这样的代码做同样的事情:
$fp = @fopen('php://stdout','w');
fwrite($fp, $message);
fclose($fp);
不幸的是,PHP-FPM 现在在我的所有日志消息前面加上丑陋的警告:
[2016-3月-21 14:10:02] 警告: [池 www] 孩子 12 说成标准输出: "2016-03-21 14:10:02 [x.x.x.x][-][-][trace][yii''base''Application::bootstrap] Bootstrap with yii''debug''Module::bootstrap()" [21-三月-2016 14:10:02]警告:[池 www] 孩子 12 对标准输出说:"2016-03-21 14:10:02 [x.x.x.x][-][-][信息][yii''web''Session::open] 会话已启动" ...
为什么会这样,有没有办法防止PHP-FPM这样做?
更新:
- 我还在docker-library/php项目站点上打开了一个问题。
- 它们已将
catch_workers_output = yes
包含在配置中。所以这不是解决方案。 - 根据这些更改,问题应该在 PHP 7.3 中修复
这是正确的。 您正在运行 php-fpm,
错误日志来自 php-fpm ,而不是来自 php。你应该期待PHP-FPM日志,而不是PHP日志。幸运的是,PHP-FPM 会将从 PHP 接收的每个日志写入其日志的末尾。
php7.3 以上 在 php.conf 中使用 decorate_workers_output = no