docker 里面的 PHP 应用程序的日志如何输出标准输出(STDOUT)?
问题:docker里面的PHP应用程序的日志如何输出标准输出(STDOUT)?
—注:不是php-fpm的日志
环境:PHP版本7.1.13
测试1:demo程序如下:
$message = json_encode(array("key1"=>"message1","key2"=>"message2"),true);
$fp = @fopen('php://stdout','w');
fwrite($fp, $message);
fclose($fp);
在docker里面执行php stdout.php 有输出,如下:
通过浏览器访问stdout.php 文件,只有nginx的access.log日志,并没有输出上面的json信息
PHP配置文件/etc/php/7.1/fpm/pool.d/www.conf 也改成
catch_workers_output = yes;
测试2:
$message = json_encode(array("key1"=>"message1","key2"=>"message2"),true);
file_put_contents('/data/www/stdout.log', $message,FILE_APPEND);
把stdout.log 重定向的/dev/stdout
ln -sf /data/www/stdout.log /dev/stdout 也是不行
请求社区大神们怎么解决此问题。
你需要php7.3
Docker 中的PHP需要保证以下3个方面,方可实现输出日志到终端控制台
比如下面这个例子:
发现 7.3 输出终端其实会带了 “WARNING: [pool www] child 88 said into stdout” 字段,一般收集只支持 json 格式的标准输出。我用另外一种方式实现,就是启动容器时候,直接 tail 日志文件到标准输出,就可以收集了。不用升级 PHP 版本,不用改动业务逻辑代码。生产运行 1,2 个月稳定正常。