为什么 PHP-FPM 在写入 stdout 时会加上警告前缀?

2022-08-30 15:21:50

我尝试使用官方的php-fpm映像在Docker容器中运行基于Yii的PHP应用程序。

Docker 容器通常将所有日志消息写入 / 。因此,我从容器中使用相同的代码,该代码基本上如下所示:stdoutstderr

$fp = @fopen('php://stdout','w');
fwrite($fp, $message);
fclose($fp);

不幸的是,PHP-FPM现在在我的所有日志消息前面加上了丑陋的警告:

[2016年3月21日,14:10:02]警告: [池 www] 孩子 12 说成 stdout: “2016-03-21 14:10:02 [x.x.x.x][-][-][trace][yii\base\Application::bootstrap] Bootstrap with yii\debug\Module::bootstrap()” [21-Mar-2016 14:10:02] 警告: [pool www] child 12 说成 stdout: “2016-03-21 14:10:02 [x.x.x.x][-][-][info][yii\web\Session::open] 会话开始” ...

为什么会这样,有没有办法防止PHP-FPM这样做?

更新:

  1. 我还在 docker-library/php 项目站点上打开了一个问题
  2. 它们已在其配置中包含 。所以这不是解决方案。catch_workers_output = yes
  3. 根据这些变化,问题应该在PHP 7.3中修复。

答案 1

这是正确的。您正在运行php-fpm,错误日志来自php-fpm,而不是来自PHP。你应该期待php-fpm日志,而不是php日志。幸运的是,php-fpm 会将 PHP 接收到的每个日志写入其日志末尾。


答案 2

推荐