问题描述
日志采集模式是标准输出stdout,nginx日志配置输出stdout可以正常接收,容器中PHP程序输出日志到/dev/stdout,日志服务无法收到
问题原因
- 在LNMP容器中,会只收集1号进程的标准输出,日志服务将1号进程的标准输出拉取日志中记录,
- 用户启动的php程序无法将日志写入到1号进程,fopen('/proc/self/fd/2', "w")动作会报错failed to open stream: Permission denied
- 使用fopen('php://stdout', "w")方式只能支持CLI方式,无法打印到1号进程https://www.php.net/manual/en/features.commandline.io-streams.php
解决方案
使用error_log函数把日志写出来/proc/1/fd/2
- error_log使用示例代码
<?php
echo "Hello World!\n";
$txt = "Bill Gates\n";
error_log($txt,0);
$txt = "Steve Jobs\n";
error_log($txt,0);
fclose($myfile);
?>
- 然后把php.ini 的日志位置更改成 /proc/1/fd/2
- 日志收集的效果