我当前使用的是官方php:7.4-apache
映像,我想将一些信息和错误记录到docker日志中。
我意识到PHP不会直接登录,而是登录到Apache2服务器,因为这是解释PHP的服务器。
还是,我尝试使用official docker docs中的信息进行直接处理:
<?php
error_log('testlog', 3, '/proc/self/fd/1');
error_log('testerror', 3, '/proc/self/fd/2');
这给了我一个“无法打开流,文件不存在”的警告。
我还注意到,仅调用error_log('test')
会创建以下日志,而无需写入stderr:
[Tue Nov 10 11:39:46.005650 2020] [php7:notice] [pid 17] [client 172.25.0.1:56576] test
我试图弄清楚是否有任何特殊的方法可以将消息发送到Apache2 stdout / stderr,但是我找不到任何有用的东西。
是否有实现此目标的方法,或者这仅仅是在容器中记录PHP的错误方法?
!!编辑:!!
到目前为止,我已经设法找出原始Dockerfile中的日志定义已在this文件中处理为/dev/stderr
和/dev/stdout
。
我还发现了以下可能性:
error_log('test', 3, 'php://stdout');
error_log('testerr', 3, 'php://stderr');
但这会导致以下输出:
> test
> 172.25.0.1 - - [18/Nov/2020:13:19:48 +0000] "GET / HTTP/1.1" 200 229 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36"
> testerr
目标是拥有这样的东西:
custom_info_log('test');
custom_error_log('testerr');
输出:
> [Wed Nov 18 13:19:48.459874 2020] [php7:info] [pid 20] [client 172.25.0.1:57398] test
> [Wed Nov 18 13:19:48.459874 2020] [php7:error] [pid 20] [client 172.25.0.1:57398] testerr
答案 0 :(得分:0)
不知道这是否有帮助,但是您可以使用以下命令将PHP的任何输出转发到文件:
ob_start();
//
// your script ....
//
$filePath = "path/to/your/log/file"
$outstream = ob_get_flush();
ob_clean();
if(!($file = fopen($filePath,"wb")))
{
echo "unable to open log file" ;
}
fwrite($file, $outstream);
fclose($file);
所以也许您可以创建一个记录所有php输出的文件,并将此文件内容转发到docker日志。