Apache2 PHP docker容器,如何将错误作为stderr记录和信息作为stdout记录到容器日志?

时间:2020-11-10 11:54:01

标签: php docker logging apache2

我当前使用的是官方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

1 个答案:

答案 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日志。